@inpageedit/core 0.15.0 → 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. package/dist/{ActionButton-CRjo_l3y.js → ActionButton-B6OUgtHx.js} +2 -2
  2. package/dist/{ActionButton-CRjo_l3y.js.map → ActionButton-B6OUgtHx.js.map} +1 -1
  3. package/dist/CheckBox-Dx3r3LQz.js +13 -0
  4. package/dist/CheckBox-Dx3r3LQz.js.map +1 -0
  5. package/dist/IconQuickDiff-BkbxyY-d.js +29 -0
  6. package/dist/IconQuickDiff-BkbxyY-d.js.map +1 -0
  7. package/dist/IconQuickEdit-BiRYADU_.js +68 -0
  8. package/dist/IconQuickEdit-BiRYADU_.js.map +1 -0
  9. package/dist/IconUpload-Bz4BW_nc.js +27 -0
  10. package/dist/IconUpload-Bz4BW_nc.js.map +1 -0
  11. package/dist/InPageEdit.js +20 -0
  12. package/dist/InPageEdit.js.map +1 -0
  13. package/dist/InputBox-D2ZRTMFP.js +42 -0
  14. package/dist/InputBox-D2ZRTMFP.js.map +1 -0
  15. package/dist/{PluginImagesUsed-Bq_C_rgg.js → PluginImagesUsed-BVyvFA1_.js} +7 -7
  16. package/dist/{PluginImagesUsed-Bq_C_rgg.js.map → PluginImagesUsed-BVyvFA1_.js.map} +1 -1
  17. package/dist/{PluginPrefSync-DP5NyPnI.js → PluginPrefSync-CUKkx4Qk.js} +10 -10
  18. package/dist/{PluginPrefSync-DP5NyPnI.js.map → PluginPrefSync-CUKkx4Qk.js.map} +1 -1
  19. package/dist/{PluginStoreApp-_YWpLgfs.js → PluginStoreApp-CoOAw1fr.js} +4 -4
  20. package/dist/{PluginStoreApp-_YWpLgfs.js.map → PluginStoreApp-CoOAw1fr.js.map} +1 -1
  21. package/dist/{PluginTemplatesUsed-DS_rHctR.js → PluginTemplatesUsed-CdjT1wR4.js} +12 -12
  22. package/dist/{PluginTemplatesUsed-DS_rHctR.js.map → PluginTemplatesUsed-CdjT1wR4.js.map} +1 -1
  23. package/dist/{index-CM_6yF2v.js → Promise.withResolvers-C4chhLB1.js} +17 -11
  24. package/dist/Promise.withResolvers-C4chhLB1.js.map +1 -0
  25. package/dist/{RadioBox-0UuxlcWZ.js → RadioBox-B0z9YHQg.js} +2 -2
  26. package/dist/{RadioBox-0UuxlcWZ.js.map → RadioBox-B0z9YHQg.js.map} +1 -1
  27. package/dist/components/index.js +75 -46
  28. package/dist/components/index.js.map +1 -1
  29. package/dist/{BasePlugin-BCVSn9QJ.js → core.js} +28 -10
  30. package/dist/core.js.map +1 -0
  31. package/dist/{index-n5KKWE9v.js → index-1tsXE6ax.js} +9 -8
  32. package/dist/{index-n5KKWE9v.js.map → index-1tsXE6ax.js.map} +1 -1
  33. package/dist/{index-CS1kidKF.js → index-B32tFyLB.js} +57 -57
  34. package/dist/{index-CS1kidKF.js.map → index-B32tFyLB.js.map} +1 -1
  35. package/dist/{index-Cq8xPcEY.js → index-BPTMltVf.js} +35 -35
  36. package/dist/index-BPTMltVf.js.map +1 -0
  37. package/dist/{index-rKL4D_7I.js → index-BYlcHc-O.js} +22 -24
  38. package/dist/index-BYlcHc-O.js.map +1 -0
  39. package/dist/{index-DjyjqpeO.js → index-C4qm_X_A.js} +11 -11
  40. package/dist/{index-DjyjqpeO.js.map → index-C4qm_X_A.js.map} +1 -1
  41. package/dist/index-CAtPo7xJ.js +793 -0
  42. package/dist/index-CAtPo7xJ.js.map +1 -0
  43. package/dist/{index-DPA1ptYq.js → index-CVCy0wPP.js} +8 -7
  44. package/dist/{index-DPA1ptYq.js.map → index-CVCy0wPP.js.map} +1 -1
  45. package/dist/index-CYfkwXRf.js +1631 -0
  46. package/dist/index-CYfkwXRf.js.map +1 -0
  47. package/dist/{index-mFwJhDwE.js → index-DZa9mxN4.js} +11 -11
  48. package/dist/{index-mFwJhDwE.js.map → index-DZa9mxN4.js.map} +1 -1
  49. package/dist/{index-B9VO3swL.js → index-Dm2vgYkZ.js} +58 -81
  50. package/dist/index-Dm2vgYkZ.js.map +1 -0
  51. package/dist/{index-C3t-Xj3e.js → index-NWWeW3tX.js} +10 -10
  52. package/dist/{index-C3t-Xj3e.js.map → index-NWWeW3tX.js.map} +1 -1
  53. package/dist/index-QnWieXQc.js +4932 -0
  54. package/dist/index-QnWieXQc.js.map +1 -0
  55. package/dist/{index-CbdkXGs7.js → index-bQ0CVu3l.js} +13 -17
  56. package/dist/{index-CbdkXGs7.js.map → index-bQ0CVu3l.js.map} +1 -1
  57. package/dist/{index-Cb2_vqBl.js → index-ygc4AMy4.js} +10 -10
  58. package/dist/{index-Cb2_vqBl.js.map → index-ygc4AMy4.js.map} +1 -1
  59. package/dist/{index-DD5CVCfD.js → index-z_qDGCMT.js} +2 -2
  60. package/dist/{index-DD5CVCfD.js.map → index-z_qDGCMT.js.map} +1 -1
  61. package/dist/index.d.ts +98 -36
  62. package/dist/index.js +24 -26
  63. package/dist/index.js.map +1 -1
  64. package/dist/{makeCallable-LDU0xZMJ.js → makeCallable-Cg4zUG4c.js} +2 -2
  65. package/dist/{makeCallable-LDU0xZMJ.js.map → makeCallable-Cg4zUG4c.js.map} +1 -1
  66. package/dist/models/index.js +7 -7
  67. package/dist/models/index.js.map +1 -1
  68. package/dist/plugins/index.js +12 -12
  69. package/dist/services/index.js +5 -4
  70. package/dist/style.css +1 -1
  71. package/dist/{vueHooks-l04s8cIl.js → vueHooks-Bs93iP61.js} +1519 -1492
  72. package/dist/vueHooks-Bs93iP61.js.map +1 -0
  73. package/lib/index.umd.js +19 -15
  74. package/lib/index.umd.js.map +1 -1
  75. package/lib/style.css +1 -1
  76. package/package.json +36 -27
  77. package/dist/BasePlugin-BCVSn9QJ.js.map +0 -1
  78. package/dist/IconQuickEdit-CMCQncyj.js +0 -27
  79. package/dist/IconQuickEdit-CMCQncyj.js.map +0 -1
  80. package/dist/InputBox-CZ1v4_l3.js +0 -50
  81. package/dist/InputBox-CZ1v4_l3.js.map +0 -1
  82. package/dist/Preferences-DqtjY7XU.js +0 -1541
  83. package/dist/Preferences-DqtjY7XU.js.map +0 -1
  84. package/dist/WatchlistAction-BbNAyryN.js +0 -5
  85. package/dist/WatchlistAction-BbNAyryN.js.map +0 -1
  86. package/dist/browser-DR-yCqVg.js +0 -1160
  87. package/dist/browser-DR-yCqVg.js.map +0 -1
  88. package/dist/index-B9VO3swL.js.map +0 -1
  89. package/dist/index-CG38LlAh.js +0 -46
  90. package/dist/index-CG38LlAh.js.map +0 -1
  91. package/dist/index-CM_6yF2v.js.map +0 -1
  92. package/dist/index-CcAmmXbb.js +0 -3290
  93. package/dist/index-CcAmmXbb.js.map +0 -1
  94. package/dist/index-Cq8xPcEY.js.map +0 -1
  95. package/dist/index-DVvsTsLI.js +0 -505
  96. package/dist/index-DVvsTsLI.js.map +0 -1
  97. package/dist/index-FvMu0Ka0.js +0 -342
  98. package/dist/index-FvMu0Ka0.js.map +0 -1
  99. package/dist/index-rKL4D_7I.js.map +0 -1
  100. package/dist/vueHooks-l04s8cIl.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"PluginStoreApp-_YWpLgfs.js","sources":["../src/plugins/plugin-store/components/ui/UIBaseButton.vue","../src/plugins/plugin-store/components/RegistryManager.vue","../src/plugins/plugin-store/components/PluginInstallManager.vue"],"sourcesContent":["<template lang=\"pug\">\nbutton.ipeps-button(:class='buttonClass')\n slot\n</template>\n\n<script setup lang=\"ts\" vapor>\nimport { computed } from 'vue'\n\nconst props = withDefaults(\n defineProps<{\n variant?: 'neutral' | 'primary' | 'danger' | 'ghost' | 'accent'\n active?: boolean\n }>(),\n {\n variant: 'neutral',\n active: false,\n }\n)\n\nconst buttonClass = computed(() => ({\n 'is-active': props.active,\n 'is-danger': props.variant === 'danger',\n 'is-primary': props.variant === 'primary',\n 'is-ghost': props.variant === 'ghost',\n 'is-accent': props.variant === 'accent',\n}))\n</script>\n","<template lang=\"pug\">\n#ipe-registry-manager\n .ipeps-header\n .ipeps-header-title {{ $`Registries` }}\n .ipeps-input-wrapper\n input.ipeps-input.with-icon(\n v-model.trim='inputValue',\n type='url',\n :placeholder='$`Add registry URL` + ` (https://...)`',\n :disabled='isAdding'\n )\n .ipeps-input-icon 📦\n UIBaseButton(@click='onAddRegistry', :disabled='isAdding || !inputValue', variant='primary') {{ isAdding ? $`Adding...` : $`Add` }}\n\n .ipeps-list(v-if='registries.length')\n .ipeps-item(v-for='reg in registries', :key='reg.registryUrl')\n .registry-info\n .item-name {{ reg.label }}\n .item-desc\n .homepage: a(v-if='reg.homepage', :href='reg.homepage', target='_blank') {{ reg.homepage }}\n .url {{ reg.registryUrl }}\n .item-meta {{ reg.packages.length }} packages\n .ipeps-actions\n UIBaseButton(@click='onRemoveRegistry(reg.registryUrl)', variant='danger') {{ $`Remove` }}\n .ipeps-empty(v-else)\n .icon 🗂️\n .text {{ $`No registries configured` }}\n .description\n UIBaseButton(\n @click='onAddOfficialRegistry',\n variant='primary',\n style='padding: 0.25rem 0.5rem'\n ) {{ $`Setup default registry` }}\n</template>\n\n<script setup lang=\"ts\" vapor>\nimport { onMounted, ref } from 'vue'\nimport { h } from 'jsx-dom'\nimport type { PluginStoreRegistry } from '../schema.js'\nimport UIBaseButton from './ui/UIBaseButton.vue'\n\nconst ctx = useIPE()\nconst $ = ctx.$\nconst $$ = ctx.$$\n\ninterface RegistryViewModel extends PluginStoreRegistry {\n registryUrl: string\n label: string\n}\n\nconst registries = ref<RegistryViewModel[]>([])\nconst inputValue = ref('')\nconst isAdding = ref(false)\n\nconst urlToLabel = (u: string) => {\n try {\n return new URL(u).hostname\n } catch {\n return u\n }\n}\n\nasync function loadRegistries() {\n const urls = (await ctx.preferences.get<string[]>('pluginStore.registries')) || []\n const results = await Promise.allSettled(\n urls.map(async (url) => {\n const info = await ctx.store.getRegistryInfo(url)\n return {\n registryUrl: url,\n label: urlToLabel(url),\n ...info,\n } as RegistryViewModel\n })\n )\n registries.value = results\n .filter((r) => r.status === 'fulfilled')\n .map((r) => (r as PromiseFulfilledResult<RegistryViewModel>).value)\n}\n\nasync function onAddRegistry() {\n const url = inputValue.value.trim()\n if (!url) return\n if (registries.value.some((r) => r.registryUrl === url)) {\n ctx.modal.notify('info', { content: 'Registry already exists.' })\n return\n }\n isAdding.value = true\n try {\n // try load immediately\n const info = await ctx.store.getRegistryInfo(url, 'online_manifest', true)\n if (!info) {\n throw new Error('Invalid registry or unreachable')\n }\n const current = (await ctx.preferences.get<string[]>('pluginStore.registries')) || []\n current.push(url)\n await ctx.preferences.set('pluginStore.registries', current)\n registries.value.push({\n registryUrl: url,\n label: urlToLabel(url),\n ...info,\n })\n inputValue.value = ''\n ctx.modal.notify('success', { content: 'Registry added.' })\n } catch (e) {\n ctx.modal.notify('error', {\n content: e instanceof Error ? e.message : String(e),\n })\n } finally {\n isAdding.value = false\n }\n}\n\nasync function removeRegistryUrl(url: string) {\n const current = (await ctx.preferences.get<string[]>('pluginStore.registries')) || []\n const next = current.filter((u) => u !== url)\n await ctx.preferences.set('pluginStore.registries', next)\n registries.value = registries.value.filter((r) => r.registryUrl !== url)\n}\n\nasync function onRemoveRegistry(url: string) {\n const installed =\n (await ctx.preferences.get<{ registry: string; id: string }[]>('pluginStore.plugins')) || []\n const installedOfReg = installed.filter((p) => p.registry === url)\n if (installedOfReg.length === 0) {\n ctx.modal.confirm(\n {\n title: $$`plugin-store.remove-registry.title`,\n content: $$`plugin-store.remove-registry.tip-content` + `\\n${url}`,\n cancelBtn: {\n label: $`Cancel`,\n className: 'is-ghost',\n },\n okBtn: {\n label: $`Remove`,\n className: 'is-danger',\n },\n },\n async (ok) => {\n if (!ok) return\n await removeRegistryUrl(url)\n ctx.modal.notify('success', { content: $$`plugin-store.remove-registry.remove-success` })\n }\n )\n return\n }\n\n ctx.modal.dialog(\n {\n title: $$`plugin-store.remove-registry.title`,\n content: h('div', { class: 'theme-ipe-prose' }, [\n h(\n 'p',\n {},\n $$({ count: installedOfReg.length })`plugin-store.remove-registry.confirm-content`\n ),\n h(\n 'ul',\n {},\n installedOfReg.map((p) => h('li', {}, p.id))\n ),\n ]),\n buttons: [\n {\n label: $$`plugin-store.remove-registry.buttons.remove-only`,\n className: 'is-danger is-ghost',\n method: async (_, m) => {\n await removeRegistryUrl(url)\n ctx.modal.notify('success', {\n content: $$`plugin-store.remove-registry.remove-success`,\n })\n m.close()\n },\n },\n {\n label: $$`plugin-store.remove-registry.buttons.remove-and-uninstall`,\n className: 'is-danger',\n method: async (_, m) => {\n await removeRegistryUrl(url)\n for (const p of installedOfReg) {\n try {\n await ctx.store.uninstallAndRemovePreference(p.registry, p.id)\n } catch (e) {\n // best-effort; notify but continue\n ctx.modal.notify('error', {\n content:\n e instanceof Error\n ? `Failed to uninstall ${p.id}: ${e.message}`\n : `Failed to uninstall ${p.id}`,\n })\n }\n }\n ctx.modal.notify('success', {\n content: $$({\n $1: installedOfReg.length,\n })`plugin-store.remove-registry.remove-with-plugins-success`,\n })\n m.close()\n },\n },\n ],\n },\n () => {}\n )\n}\n\nfunction onPreferencesChanged(payload: { changes: Record<string, unknown> }) {\n const regs = payload.changes['pluginStore.registries'] as string[]\n if (Array.isArray(regs)) {\n loadRegistries()\n }\n}\n\nfunction onAddOfficialRegistry() {\n const url = Endpoints.PLUGIN_REGISTRY_URL\n inputValue.value = url\n onAddRegistry()\n}\n\nonMounted(() => {\n loadRegistries()\n ctx.on('preferences/changed', onPreferencesChanged)\n})\n</script>\n\n<style scoped lang=\"scss\">\n@use './style.scss' as *;\n\n.registry-info {\n flex: 1;\n min-width: 0;\n .homepage {\n margin-top: 0.25rem;\n a {\n color: var(--ipe-modal-accent);\n text-decoration: none;\n font-size: 0.8125rem;\n transition: all 0.2s ease;\n &:hover {\n color: color-mix(in srgb, var(--ipe-modal-accent) 80%, var(--ipe-modal-text));\n text-decoration: underline;\n }\n }\n }\n .url {\n font-family: monospace;\n font-size: 0.75rem;\n color: var(--ipe-modal-muted);\n margin-top: 0.125rem;\n word-break: break-all;\n }\n}\n</style>\n","<template lang=\"pug\">\n#ipe-plugin-install-manager\n .ipeps-header\n .ipeps-header-title {{ $`Plugins` }}\n .ipeps-input-wrapper\n input.ipeps-input.with-icon(\n v-model.trim='searchInput',\n type='text',\n :placeholder='$`Search plugins...`',\n :disabled='!pluginsFromRegistries.length'\n )\n .ipeps-input-icon 🔍\n button.ipeps-button(\n @click='refreshRegistries',\n :disabled='isRefreshing || !hasRegistries',\n :class='{ refreshing: isRefreshing }',\n variant='primary'\n ) {{ isRefreshing ? $`Refreshing...` : $`Refresh` }}\n\n .ipeps-loading(v-if='!hasRegistries && !firstInit')\n .loading-spinner\n .loading-text {{ $`Loading...` }}\n\n .ipeps-list(v-else-if='allPluginsToDisplay.length')\n .ipeps-item(\n v-for='plugin in allPluginsToDisplay',\n :key='plugin._key',\n :class='{ installed: isInstalledKey(plugin._key), broken: plugin.isBroken }'\n )\n .plugin-info\n .plugin-header\n .item-name {{ plugin.name || plugin.id }}\n span.ipeps-badge(\n v-if='isInstalledKey(plugin._key) || plugin.isBroken',\n :class='{ \"is-installed\": isInstalledKey(plugin._key), \"is-broken\": plugin.isBroken }'\n ) {{ plugin.isBroken ? $$`plugin-store.tags.broken` : $$`plugin-store.tags.installed` }}\n .ipeps-tags\n a.ipeps-tag.registry-tag(\n v-if='plugin.registryHomepage && !plugin.isRegistryMissing',\n :href='plugin.registryHomepage',\n target='_blank',\n :title='plugin.registryLabel'\n ) {{ plugin.registryLabel }}\n span.ipeps-tag.registry-tag(\n v-else,\n :title='plugin.registryLabel',\n :class='{ broken: plugin.isRegistryMissing }'\n ) {{ plugin.registryLabel }}\n .plugin-id.ipeps-tag(:class='{ broken: plugin.isBroken && !plugin.isRegistryMissing }') {{ plugin.id }}\n .plugin-desc(:class='{ \"broken-desc\": plugin.isBroken }') {{ getDesc(plugin) }}\n .plugin-meta\n span.version(v-if='plugin.version') v{{ plugin.version }}\n span.author(v-if='plugin.author') 👤 {{ plugin.author }}\n span.license(v-if='plugin.license') 📜 {{ plugin.license }}\n UIBaseButton(\n :active='isInstalledKey(plugin._key)',\n :variant='isInstalledKey(plugin._key) ? \"danger\" : \"primary\"',\n @click='togglePluginByKey(plugin)'\n ) {{ isInstalledKey(plugin._key) ? $`Remove` : $`Install` }}\n\n .ipeps-empty(v-else)\n .plugin-empty-icon 📦\n .plugin-empty-text {{ $`No matching plugins found` }}\n</template>\n\n<script setup lang=\"ts\" vapor>\nimport { computed, onBeforeUnmount, onMounted, ref } from 'vue'\nimport type { PluginStorePackage, PluginStoreRegistry } from '../schema.js'\nimport UIBaseButton from './ui/UIBaseButton.vue'\n\ninterface RegistryWithUrl extends PluginStoreRegistry {\n registryUrl: string\n}\ninterface PluginIdentifier {\n registry: string\n id: string\n}\n\ninterface PluginViewModel extends PluginStorePackage {\n _key: string\n registry: string\n registryHomepage: string\n registryLabel: string\n isBroken: boolean\n isRegistryMissing: boolean\n}\n\n// --- state ---\nconst ctx = useIPE()\nconst $ = ctx.$\nconst $$ = ctx.$$\nconst registryInfos = ref<RegistryWithUrl[]>([])\nconst installedPlugins = ref<PluginIdentifier[]>([])\nconst searchInput = ref('')\nconst isRefreshing = ref(false)\n\n// helpers\nconst makeKey = (r: string, id: string) => `${r}\\n${id}` // stable + O(1)\n\nconst installedKeySet = computed(\n () => new Set(installedPlugins.value.map((p) => makeKey(p.registry, p.id)))\n)\nconst isInstalledKey = (key: string) => installedKeySet.value.has(key)\n\nconst urlToLabel = (registryUrl: string) => {\n try {\n return new URL(registryUrl).hostname\n } catch {\n return registryUrl\n }\n}\n\nconst firstInit = ref(false)\nconst hasRegistries = computed(() => registryInfos.value.length > 0)\n\nconst pluginsFromRegistries = computed<PluginViewModel[]>(\n () =>\n registryInfos.value.flatMap((reg) =>\n (reg.packages || []).map((pkg) => ({\n ...pkg,\n _key: makeKey(reg.registryUrl, pkg.id),\n registry: reg.registryUrl,\n registryHomepage: reg.homepage,\n registryLabel: urlToLabel(reg.registryUrl),\n isBroken: false,\n isRegistryMissing: false,\n }))\n ) as PluginViewModel[]\n)\n\n// merge normal + broken, and normalize once here\nconst normalizedPlugins = computed(() => {\n const q = searchInput.value.trim().toLowerCase()\n\n const all: Array<any> = pluginsFromRegistries.value\n\n // broken installed plugins (installed but not available now)\n const availableKeys = new Set(all.map((p) => p._key))\n const availableRegs = new Set(registryInfos.value.map((r) => r.registryUrl))\n\n const broken = installedPlugins.value\n .filter((p) => !availableKeys.has(makeKey(p.registry, p.id)))\n .map((p) => {\n const regInfo = registryInfos.value.find((r) => r.registryUrl === p.registry)\n return {\n id: p.id,\n name: undefined,\n description: undefined,\n version: undefined,\n author: undefined,\n license: undefined,\n _key: makeKey(p.registry, p.id),\n registry: p.registry,\n registryHomepage: regInfo?.homepage,\n registryLabel: urlToLabel(p.registry),\n isBroken: true,\n isRegistryMissing: !availableRegs.has(p.registry),\n }\n })\n\n const filtered = (list: any[]) => {\n if (!q) return list\n return list.filter(\n (p) =>\n (p.name && p.name.toLowerCase().includes(q)) ||\n (p.id && p.id.toLowerCase().includes(q)) ||\n (p.description && p.description.toLowerCase().includes(q)) ||\n (p.author && p.author.toLowerCase().includes(q)) ||\n (p.registry && p.registry.toLowerCase().includes(q))\n )\n }\n\n // broken on top\n return [...filtered(broken), ...filtered(all)]\n})\n\nconst allPluginsToDisplay = computed(() => normalizedPlugins.value)\n\nconst getDesc = (p: any) => {\n if (p.description) return p.description\n if (!p.isBroken) return ''\n return p.isRegistryMissing\n ? $$`plugin-store.broken.registry-unavailable`\n : $$`plugin-store.broken.plugin-removed`\n}\n\n// actions\nconst enablePlugin = async (registry: string, id: string) => {\n ctx.store.installAndSetPreference(registry, id)\n}\nconst disablePlugin = async (registry: string, id: string) => {\n ctx.store.uninstallAndRemovePreference(registry, id)\n}\nconst togglePlugin = (registry: string, id: string) =>\n isInstalledKey(makeKey(registry, id)) ? disablePlugin(registry, id) : enablePlugin(registry, id)\nconst togglePluginByKey = (p: any) => togglePlugin(p.registry, p.id)\n\nconst refreshRegistries = async () => {\n if (isRefreshing.value) return\n if (registryInfos.value.length === 0) {\n ctx.modal.notify('info', {\n content: 'No registry configured. Please add a registry first.',\n })\n return\n }\n\n isRefreshing.value = true\n const results = await ctx.store.refreshAllRegistryCaches()\n const okResults = Object.entries(results).filter(([_, r]) => r !== null)\n registryInfos.value = okResults.map(([url, r]) => ({\n ...r!,\n registryUrl: url,\n }))\n const failedUrls = Object.entries(results)\n .filter(([_, r]) => r === null)\n .map(([url]) => url)\n isRefreshing.value = false\n\n if (okResults.length === 0) {\n ctx.modal.notify('error', {\n content: 'All registries failed to refresh',\n })\n } else {\n ctx.modal.notify('success', {\n content: `${okResults.length} ${okResults.length === 1 ? 'registry' : 'registries'} refreshed successfully.`,\n })\n if (failedUrls.length > 0) {\n ctx.modal.notify('warning', {\n content: `${failedUrls.length} ${failedUrls.length === 1 ? 'registry' : 'registries'} failed to refresh:\\n${failedUrls.join('\\n')}`,\n })\n }\n }\n}\n\n// init\nconst init = async () => {\n firstInit.value = false\n const urls = (await ctx.store.ctx.preferences.get('pluginStore.registries')) || []\n const regResults = await Promise.allSettled(\n urls.map(async (url: string) => ({\n ...(await ctx.store.getRegistryInfo(url)),\n registryUrl: url,\n }))\n )\n registryInfos.value = regResults\n .filter((r) => r.status === 'fulfilled')\n .map((r) => (r as PromiseFulfilledResult<RegistryWithUrl>).value)\n\n installedPlugins.value = (await ctx.preferences.get('pluginStore.plugins')) || []\n\n firstInit.value = true\n}\n\nfunction onPreferencesChanged(payload: { changes: Record<string, unknown> }) {\n const regs = payload.changes['pluginStore.registries'] as string[]\n const plugins = payload.changes['pluginStore.plugins'] as PluginIdentifier[]\n if (Array.isArray(plugins)) installedPlugins.value = plugins\n if (Array.isArray(regs)) {\n init()\n }\n}\n\nonMounted(() => {\n init()\n ctx.on('preferences/changed', onPreferencesChanged)\n})\nonBeforeUnmount(() => {})\n</script>\n\n<style scoped lang=\"scss\">\n@use './style.scss' as *;\n\n.plugin-info {\n flex: 1;\n min-width: 0;\n}\n.plugin-header {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n margin-bottom: 0.375rem;\n}\n.registry-tag {\n color: var(--ipe-modal-accent);\n background: color-mix(in srgb, var(--ipe-modal-accent) 8%, transparent);\n border: 1px solid color-mix(in srgb, var(--ipe-modal-accent) 18%, transparent);\n text-decoration: none;\n transition: all 0.2s ease;\n &:hover {\n background: color-mix(in srgb, var(--ipe-modal-accent) 12%, transparent);\n border-color: color-mix(in srgb, var(--ipe-modal-accent) 30%, transparent);\n }\n &.broken {\n text-decoration: line-through;\n opacity: 0.65;\n cursor: not-allowed;\n }\n}\n.plugin-id {\n &.broken {\n opacity: 0.65;\n text-decoration: line-through;\n }\n}\n.plugin-desc {\n font-size: 0.8125rem;\n color: var(--ipe-modal-muted);\n margin-bottom: 0.5rem;\n line-height: 1.6;\n &.broken-desc {\n color: color-mix(in srgb, var(--ipe-modal-warning) 80%, var(--ipe-modal-text));\n font-style: italic;\n }\n}\n.plugin-meta {\n font-size: 0.75rem;\n color: var(--ipe-modal-muted);\n display: flex;\n gap: 1rem;\n align-items: center;\n .version {\n font-family: monospace;\n font-weight: 500;\n color: color-mix(in srgb, var(--ipe-modal-text) 80%, var(--ipe-modal-muted));\n }\n .author {\n display: flex;\n align-items: center;\n gap: 0.25rem;\n }\n .license {\n display: flex;\n align-items: center;\n gap: 0.25rem;\n }\n}\n</style>\n"],"names":["props","__props","buttonClass","computed","ctx","useIPE","$","$$","registries","ref","inputValue","isAdding","urlToLabel","u","loadRegistries","urls","results","url","info","r","onAddRegistry","current","e","removeRegistryUrl","next","onRemoveRegistry","installedOfReg","p","ok","h","_","m","onPreferencesChanged","payload","regs","onAddOfficialRegistry","Endpoints","onMounted","registryInfos","installedPlugins","searchInput","isRefreshing","makeKey","id","installedKeySet","isInstalledKey","key","registryUrl","firstInit","hasRegistries","pluginsFromRegistries","reg","pkg","normalizedPlugins","q","all","availableKeys","availableRegs","broken","regInfo","filtered","list","allPluginsToDisplay","getDesc","enablePlugin","registry","disablePlugin","togglePlugin","togglePluginByKey","refreshRegistries","okResults","failedUrls","init","regResults","plugins","onBeforeUnmount"],"mappings":";;;;;;;;;;;AAQA,UAAMA,IAAQC,GAWRC,IAAcC,EAAS,OAAO;AAAA,MAClC,aAAaH,EAAM;AAAA,MACnB,aAAaA,EAAM,YAAY;AAAA,MAC/B,cAAcA,EAAM,YAAY;AAAA,MAChC,YAAYA,EAAM,YAAY;AAAA,MAC9B,aAAaA,EAAM,YAAY;AAAA,IAAA,EAC/B;;;;;;;;;;;;;;;;ACgBF,UAAMI,IAAMC,EAAA,GACNC,IAAIF,EAAI,GACRG,IAAKH,EAAI,IAOTI,IAAaC,EAAyB,EAAE,GACxCC,IAAaD,EAAI,EAAE,GACnBE,IAAWF,EAAI,EAAK,GAEpBG,IAAa,CAACC,MAAc;AAChC,UAAI;AACF,eAAO,IAAI,IAAIA,CAAC,EAAE;AAAA,MACpB,QAAQ;AACN,eAAOA;AAAA,MACT;AAAA,IACF;AAEA,mBAAeC,IAAiB;AAC9B,YAAMC,IAAQ,MAAMX,EAAI,YAAY,IAAc,wBAAwB,KAAM,CAAA,GAC1EY,IAAU,MAAM,QAAQ;AAAA,QAC5BD,EAAK,IAAI,OAAOE,MAAQ;AACtB,gBAAMC,IAAO,MAAMd,EAAI,MAAM,gBAAgBa,CAAG;AAChD,iBAAO;AAAA,YACL,aAAaA;AAAA,YACb,OAAOL,EAAWK,CAAG;AAAA,YACrB,GAAGC;AAAA,UAAA;AAAA,QAEP,CAAC;AAAA,MAAA;AAEH,MAAAV,EAAW,QAAQQ,EAChB,OAAO,CAACG,MAAMA,EAAE,WAAW,WAAW,EACtC,IAAI,CAACA,MAAOA,EAAgD,KAAK;AAAA,IACtE;AAEA,mBAAeC,IAAgB;AAC7B,YAAMH,IAAMP,EAAW,MAAM,KAAA;AAC7B,UAAKO,GACL;AAAA,YAAIT,EAAW,MAAM,KAAK,CAACW,MAAMA,EAAE,gBAAgBF,CAAG,GAAG;AACvD,UAAAb,EAAI,MAAM,OAAO,QAAQ,EAAE,SAAS,4BAA4B;AAChE;AAAA,QACF;AACA,QAAAO,EAAS,QAAQ;AACjB,YAAI;AAEF,gBAAMO,IAAO,MAAMd,EAAI,MAAM,gBAAgBa,GAAK,mBAAmB,EAAI;AACzE,cAAI,CAACC;AACH,kBAAM,IAAI,MAAM,iCAAiC;AAEnD,gBAAMG,IAAW,MAAMjB,EAAI,YAAY,IAAc,wBAAwB,KAAM,CAAA;AACnF,UAAAiB,EAAQ,KAAKJ,CAAG,GAChB,MAAMb,EAAI,YAAY,IAAI,0BAA0BiB,CAAO,GAC3Db,EAAW,MAAM,KAAK;AAAA,YACpB,aAAaS;AAAA,YACb,OAAOL,EAAWK,CAAG;AAAA,YACrB,GAAGC;AAAA,UAAA,CACJ,GACDR,EAAW,QAAQ,IACnBN,EAAI,MAAM,OAAO,WAAW,EAAE,SAAS,mBAAmB;AAAA,QAC5D,SAASkB,GAAG;AACV,UAAAlB,EAAI,MAAM,OAAO,SAAS;AAAA,YACxB,SAASkB,aAAa,QAAQA,EAAE,UAAU,OAAOA,CAAC;AAAA,UAAA,CACnD;AAAA,QACH,UAAA;AACE,UAAAX,EAAS,QAAQ;AAAA,QACnB;AAAA;AAAA,IACF;AAEA,mBAAeY,EAAkBN,GAAa;AAE5C,YAAMO,KADW,MAAMpB,EAAI,YAAY,IAAc,wBAAwB,KAAM,CAAA,GAC9D,OAAO,CAACS,MAAMA,MAAMI,CAAG;AAC5C,YAAMb,EAAI,YAAY,IAAI,0BAA0BoB,CAAI,GACxDhB,EAAW,QAAQA,EAAW,MAAM,OAAO,CAACW,MAAMA,EAAE,gBAAgBF,CAAG;AAAA,IACzE;AAEA,mBAAeQ,EAAiBR,GAAa;AAG3C,YAAMS,KADH,MAAMtB,EAAI,YAAY,IAAwC,qBAAqB,KAAM,CAAA,GAC3D,OAAO,CAACuB,MAAMA,EAAE,aAAaV,CAAG;AACjE,UAAIS,EAAe,WAAW,GAAG;AAC/B,QAAAtB,EAAI,MAAM;AAAA,UACR;AAAA,YACE,OAAOG;AAAA,YACP,SAASA,8CAA+C;AAAA,EAAKU,CAAG;AAAA,YAChE,WAAW;AAAA,cACT,OAAOX;AAAA,cACP,WAAW;AAAA,YAAA;AAAA,YAEb,OAAO;AAAA,cACL,OAAOA;AAAA,cACP,WAAW;AAAA,YAAA;AAAA,UACb;AAAA,UAEF,OAAOsB,MAAO;AACZ,YAAKA,MACL,MAAML,EAAkBN,CAAG,GAC3Bb,EAAI,MAAM,OAAO,WAAW,EAAE,SAASG,gDAAiD;AAAA,UAC1F;AAAA,QAAA;AAEF;AAAA,MACF;AAEA,MAAAH,EAAI,MAAM;AAAA,QACR;AAAA,UACE,OAAOG;AAAA,UACP,SAASsB,EAAE,OAAO,EAAE,OAAO,qBAAqB;AAAA,YAC9CA;AAAAA,cACE;AAAA,cACA,CAAA;AAAA,cACAtB,EAAG,EAAE,OAAOmB,EAAe,QAAQ;AAAA,YAAA;AAAA,YAErCG;AAAAA,cACE;AAAA,cACA,CAAA;AAAA,cACAH,EAAe,IAAI,CAACC,MAAME,EAAE,MAAM,CAAA,GAAIF,EAAE,EAAE,CAAC;AAAA,YAAA;AAAA,UAC7C,CACD;AAAA,UACD,SAAS;AAAA,YACP;AAAA,cACE,OAAOpB;AAAA,cACP,WAAW;AAAA,cACX,QAAQ,OAAOuB,GAAGC,MAAM;AACtB,sBAAMR,EAAkBN,CAAG,GAC3Bb,EAAI,MAAM,OAAO,WAAW;AAAA,kBAC1B,SAASG;AAAA,gBAAA,CACV,GACDwB,EAAE,MAAA;AAAA,cACJ;AAAA,YAAA;AAAA,YAEF;AAAA,cACE,OAAOxB;AAAA,cACP,WAAW;AAAA,cACX,QAAQ,OAAOuB,GAAGC,MAAM;AACtB,sBAAMR,EAAkBN,CAAG;AAC3B,2BAAWU,KAAKD;AACd,sBAAI;AACF,0BAAMtB,EAAI,MAAM,6BAA6BuB,EAAE,UAAUA,EAAE,EAAE;AAAA,kBAC/D,SAASL,GAAG;AAEV,oBAAAlB,EAAI,MAAM,OAAO,SAAS;AAAA,sBACxB,SACEkB,aAAa,QACT,uBAAuBK,EAAE,EAAE,KAAKL,EAAE,OAAO,KACzC,uBAAuBK,EAAE,EAAE;AAAA,oBAAA,CAClC;AAAA,kBACH;AAEF,gBAAAvB,EAAI,MAAM,OAAO,WAAW;AAAA,kBAC1B,SAASG,EAAG;AAAA,oBACV,IAAImB,EAAe;AAAA,kBAAA,CACpB;AAAA,gBAAA,CACF,GACDK,EAAE,MAAA;AAAA,cACJ;AAAA,YAAA;AAAA,UACF;AAAA,QACF;AAAA,QAEF,MAAM;AAAA,QAAC;AAAA,MAAA;AAAA,IAEX;AAEA,aAASC,EAAqBC,GAA+C;AAC3E,YAAMC,IAAOD,EAAQ,QAAQ,wBAAwB;AACrD,MAAI,MAAM,QAAQC,CAAI,KACpBpB,EAAA;AAAA,IAEJ;AAEA,aAASqB,IAAwB;AAC/B,YAAMlB,IAAMmB,GAAU;AACtB,MAAA1B,EAAW,QAAQO,GACnBG,EAAA;AAAA,IACF;AAEA,WAAAiB,EAAU,MAAM;AACd,MAAAvB,EAAA,GACAV,EAAI,GAAG,uBAAuB4B,CAAoB;AAAA,IACpD,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrID,UAAM5B,IAAMC,EAAA,GACNC,IAAIF,EAAI,GACRG,IAAKH,EAAI,IACTkC,IAAgB7B,EAAuB,EAAE,GACzC8B,IAAmB9B,EAAwB,EAAE,GAC7C+B,IAAc/B,EAAI,EAAE,GACpBgC,IAAehC,EAAI,EAAK,GAGxBiC,IAAU,CAACvB,GAAWwB,MAAe,GAAGxB,CAAC;AAAA,EAAKwB,CAAE,IAEhDC,IAAkBzC;AAAA,MACtB,MAAM,IAAI,IAAIoC,EAAiB,MAAM,IAAI,CAACZ,MAAMe,EAAQf,EAAE,UAAUA,EAAE,EAAE,CAAC,CAAC;AAAA,IAAA,GAEtEkB,IAAiB,CAACC,MAAgBF,EAAgB,MAAM,IAAIE,CAAG,GAE/DlC,IAAa,CAACmC,MAAwB;AAC1C,UAAI;AACF,eAAO,IAAI,IAAIA,CAAW,EAAE;AAAA,MAC9B,QAAQ;AACN,eAAOA;AAAA,MACT;AAAA,IACF,GAEMC,IAAYvC,EAAI,EAAK,GACrBwC,IAAgB9C,EAAS,MAAMmC,EAAc,MAAM,SAAS,CAAC,GAE7DY,IAAwB/C;AAAA,MAC5B,MACEmC,EAAc,MAAM;AAAA,QAAQ,CAACa,OAC1BA,EAAI,YAAY,CAAA,GAAI,IAAI,CAACC,OAAS;AAAA,UACjC,GAAGA;AAAA,UACH,MAAMV,EAAQS,EAAI,aAAaC,EAAI,EAAE;AAAA,UACrC,UAAUD,EAAI;AAAA,UACd,kBAAkBA,EAAI;AAAA,UACtB,eAAevC,EAAWuC,EAAI,WAAW;AAAA,UACzC,UAAU;AAAA,UACV,mBAAmB;AAAA,QAAA,EACnB;AAAA,MAAA;AAAA,IACJ,GAIEE,IAAoBlD,EAAS,MAAM;AACvC,YAAMmD,IAAId,EAAY,MAAM,KAAA,EAAO,YAAA,GAE7Be,IAAkBL,EAAsB,OAGxCM,IAAgB,IAAI,IAAID,EAAI,IAAI,CAAC5B,MAAMA,EAAE,IAAI,CAAC,GAC9C8B,IAAgB,IAAI,IAAInB,EAAc,MAAM,IAAI,CAACnB,MAAMA,EAAE,WAAW,CAAC,GAErEuC,IAASnB,EAAiB,MAC7B,OAAO,CAACZ,MAAM,CAAC6B,EAAc,IAAId,EAAQf,EAAE,UAAUA,EAAE,EAAE,CAAC,CAAC,EAC3D,IAAI,CAACA,MAAM;AACV,cAAMgC,IAAUrB,EAAc,MAAM,KAAK,CAACnB,OAAMA,GAAE,gBAAgBQ,EAAE,QAAQ;AAC5E,eAAO;AAAA,UACL,IAAIA,EAAE;AAAA,UACN,MAAM;AAAA,UACN,aAAa;AAAA,UACb,SAAS;AAAA,UACT,QAAQ;AAAA,UACR,SAAS;AAAA,UACT,MAAMe,EAAQf,EAAE,UAAUA,EAAE,EAAE;AAAA,UAC9B,UAAUA,EAAE;AAAA,UACZ,kBAAkBgC,GAAS;AAAA,UAC3B,eAAe/C,EAAWe,EAAE,QAAQ;AAAA,UACpC,UAAU;AAAA,UACV,mBAAmB,CAAC8B,EAAc,IAAI9B,EAAE,QAAQ;AAAA,QAAA;AAAA,MAEpD,CAAC,GAEGiC,IAAW,CAACC,MACXP,IACEO,EAAK;AAAA,QACV,CAAClC,MACEA,EAAE,QAAQA,EAAE,KAAK,YAAA,EAAc,SAAS2B,CAAC,KACzC3B,EAAE,MAAMA,EAAE,GAAG,YAAA,EAAc,SAAS2B,CAAC,KACrC3B,EAAE,eAAeA,EAAE,YAAY,YAAA,EAAc,SAAS2B,CAAC,KACvD3B,EAAE,UAAUA,EAAE,OAAO,YAAA,EAAc,SAAS2B,CAAC,KAC7C3B,EAAE,YAAYA,EAAE,SAAS,cAAc,SAAS2B,CAAC;AAAA,MAAA,IAPvCO;AAYjB,aAAO,CAAC,GAAGD,EAASF,CAAM,GAAG,GAAGE,EAASL,CAAG,CAAC;AAAA,IAC/C,CAAC,GAEKO,IAAsB3D,EAAS,MAAMkD,EAAkB,KAAK,GAE5DU,IAAU,CAACpC,MACXA,EAAE,cAAoBA,EAAE,cACvBA,EAAE,WACAA,EAAE,oBACLpB,8CACAA,wCAHoB,IAOpByD,IAAe,OAAOC,GAAkBtB,MAAe;AAC3D,MAAAvC,EAAI,MAAM,wBAAwB6D,GAAUtB,CAAE;AAAA,IAChD,GACMuB,IAAgB,OAAOD,GAAkBtB,MAAe;AAC5D,MAAAvC,EAAI,MAAM,6BAA6B6D,GAAUtB,CAAE;AAAA,IACrD,GACMwB,IAAe,CAACF,GAAkBtB,MACtCE,EAAeH,EAAQuB,GAAUtB,CAAE,CAAC,IAAIuB,EAAcD,GAAUtB,CAAE,IAAIqB,EAAaC,GAAUtB,CAAE,GAC3FyB,IAAoB,CAACzC,MAAWwC,EAAaxC,EAAE,UAAUA,EAAE,EAAE,GAE7D0C,IAAoB,YAAY;AACpC,UAAI5B,EAAa,MAAO;AACxB,UAAIH,EAAc,MAAM,WAAW,GAAG;AACpC,QAAAlC,EAAI,MAAM,OAAO,QAAQ;AAAA,UACvB,SAAS;AAAA,QAAA,CACV;AACD;AAAA,MACF;AAEA,MAAAqC,EAAa,QAAQ;AACrB,YAAMzB,IAAU,MAAMZ,EAAI,MAAM,yBAAA,GAC1BkE,IAAY,OAAO,QAAQtD,CAAO,EAAE,OAAO,CAAC,CAACc,GAAGX,CAAC,MAAMA,MAAM,IAAI;AACvE,MAAAmB,EAAc,QAAQgC,EAAU,IAAI,CAAC,CAACrD,GAAKE,CAAC,OAAO;AAAA,QACjD,GAAGA;AAAA,QACH,aAAaF;AAAA,MAAA,EACb;AACF,YAAMsD,IAAa,OAAO,QAAQvD,CAAO,EACtC,OAAO,CAAC,CAACc,GAAGX,CAAC,MAAMA,MAAM,IAAI,EAC7B,IAAI,CAAC,CAACF,CAAG,MAAMA,CAAG;AACrB,MAAAwB,EAAa,QAAQ,IAEjB6B,EAAU,WAAW,IACvBlE,EAAI,MAAM,OAAO,SAAS;AAAA,QACxB,SAAS;AAAA,MAAA,CACV,KAEDA,EAAI,MAAM,OAAO,WAAW;AAAA,QAC1B,SAAS,GAAGkE,EAAU,MAAM,IAAIA,EAAU,WAAW,IAAI,aAAa,YAAY;AAAA,MAAA,CACnF,GACGC,EAAW,SAAS,KACtBnE,EAAI,MAAM,OAAO,WAAW;AAAA,QAC1B,SAAS,GAAGmE,EAAW,MAAM,IAAIA,EAAW,WAAW,IAAI,aAAa,YAAY;AAAA,EAAwBA,EAAW,KAAK;AAAA,CAAI,CAAC;AAAA,MAAA,CAClI;AAAA,IAGP,GAGMC,IAAO,YAAY;AACvB,MAAAxB,EAAU,QAAQ;AAClB,YAAMjC,IAAQ,MAAMX,EAAI,MAAM,IAAI,YAAY,IAAI,wBAAwB,KAAM,CAAA,GAC1EqE,IAAa,MAAM,QAAQ;AAAA,QAC/B1D,EAAK,IAAI,OAAOE,OAAiB;AAAA,UAC/B,GAAI,MAAMb,EAAI,MAAM,gBAAgBa,CAAG;AAAA,UACvC,aAAaA;AAAA,QAAA,EACb;AAAA,MAAA;AAEJ,MAAAqB,EAAc,QAAQmC,EACnB,OAAO,CAACtD,MAAMA,EAAE,WAAW,WAAW,EACtC,IAAI,CAACA,MAAOA,EAA8C,KAAK,GAElEoB,EAAiB,QAAS,MAAMnC,EAAI,YAAY,IAAI,qBAAqB,KAAM,CAAA,GAE/E4C,EAAU,QAAQ;AAAA,IACpB;AAEA,aAAShB,GAAqBC,GAA+C;AAC3E,YAAMC,IAAOD,EAAQ,QAAQ,wBAAwB,GAC/CyC,IAAUzC,EAAQ,QAAQ,qBAAqB;AACrD,MAAI,MAAM,QAAQyC,CAAO,QAAoB,QAAQA,IACjD,MAAM,QAAQxC,CAAI,KACpBsC,EAAA;AAAA,IAEJ;AAEA,WAAAnC,EAAU,MAAM;AACd,MAAAmC,EAAA,GACApE,EAAI,GAAG,uBAAuB4B,EAAoB;AAAA,IACpD,CAAC,GACD2C,GAAgB,MAAM;AAAA,IAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"PluginStoreApp-CoOAw1fr.js","sources":["../src/plugins/plugin-store/components/ui/UIBaseButton.vue","../src/plugins/plugin-store/components/RegistryManager.vue","../src/plugins/plugin-store/components/PluginInstallManager.vue"],"sourcesContent":["<template lang=\"pug\">\nbutton.ipeps-button(:class='buttonClass')\n slot\n</template>\n\n<script setup lang=\"ts\" vapor>\nimport { computed } from 'vue'\n\nconst props = withDefaults(\n defineProps<{\n variant?: 'neutral' | 'primary' | 'danger' | 'ghost' | 'accent'\n active?: boolean\n }>(),\n {\n variant: 'neutral',\n active: false,\n }\n)\n\nconst buttonClass = computed(() => ({\n 'is-active': props.active,\n 'is-danger': props.variant === 'danger',\n 'is-primary': props.variant === 'primary',\n 'is-ghost': props.variant === 'ghost',\n 'is-accent': props.variant === 'accent',\n}))\n</script>\n","<template lang=\"pug\">\n#ipe-registry-manager\n .ipeps-header\n .ipeps-header-title {{ $`Registries` }}\n .ipeps-input-wrapper\n input.ipeps-input.with-icon(\n v-model.trim='inputValue',\n type='url',\n :placeholder='$`Add registry URL` + ` (https://...)`',\n :disabled='isAdding'\n )\n .ipeps-input-icon 📦\n UIBaseButton(@click='onAddRegistry', :disabled='isAdding || !inputValue', variant='primary') {{ isAdding ? $`Adding...` : $`Add` }}\n\n .ipeps-list(v-if='registries.length')\n .ipeps-item(v-for='reg in registries', :key='reg.registryUrl')\n .registry-info\n .item-name {{ reg.label }}\n .item-desc\n .homepage: a(v-if='reg.homepage', :href='reg.homepage', target='_blank') {{ reg.homepage }}\n .url {{ reg.registryUrl }}\n .item-meta {{ reg.packages.length }} packages\n .ipeps-actions\n UIBaseButton(@click='onRemoveRegistry(reg.registryUrl)', variant='danger') {{ $`Remove` }}\n .ipeps-empty(v-else)\n .icon 🗂️\n .text {{ $`No registries configured` }}\n .description\n UIBaseButton(\n @click='onAddOfficialRegistry',\n variant='primary',\n style='padding: 0.25rem 0.5rem'\n ) {{ $`Setup default registry` }}\n</template>\n\n<script setup lang=\"ts\" vapor>\nimport { onMounted, ref } from 'vue'\nimport { h } from 'jsx-dom'\nimport type { PluginStoreRegistry } from '../schema.js'\nimport UIBaseButton from './ui/UIBaseButton.vue'\n\nconst ctx = useIPE()\nconst $ = ctx.$\nconst $$ = ctx.$$\n\ninterface RegistryViewModel extends PluginStoreRegistry {\n registryUrl: string\n label: string\n}\n\nconst registries = ref<RegistryViewModel[]>([])\nconst inputValue = ref('')\nconst isAdding = ref(false)\n\nconst urlToLabel = (u: string) => {\n try {\n return new URL(u).hostname\n } catch {\n return u\n }\n}\n\nasync function loadRegistries() {\n const urls = (await ctx.preferences.get<string[]>('pluginStore.registries')) || []\n const results = await Promise.allSettled(\n urls.map(async (url) => {\n const info = await ctx.store.getRegistryInfo(url)\n return {\n registryUrl: url,\n label: urlToLabel(url),\n ...info,\n } as RegistryViewModel\n })\n )\n registries.value = results\n .filter((r) => r.status === 'fulfilled')\n .map((r) => (r as PromiseFulfilledResult<RegistryViewModel>).value)\n}\n\nasync function onAddRegistry() {\n const url = inputValue.value.trim()\n if (!url) return\n if (registries.value.some((r) => r.registryUrl === url)) {\n ctx.modal.notify('info', { content: 'Registry already exists.' })\n return\n }\n isAdding.value = true\n try {\n // try load immediately\n const info = await ctx.store.getRegistryInfo(url, 'online_manifest', true)\n if (!info) {\n throw new Error('Invalid registry or unreachable')\n }\n const current = (await ctx.preferences.get<string[]>('pluginStore.registries')) || []\n current.push(url)\n await ctx.preferences.set('pluginStore.registries', current)\n registries.value.push({\n registryUrl: url,\n label: urlToLabel(url),\n ...info,\n })\n inputValue.value = ''\n ctx.modal.notify('success', { content: 'Registry added.' })\n } catch (e) {\n ctx.modal.notify('error', {\n content: e instanceof Error ? e.message : String(e),\n })\n } finally {\n isAdding.value = false\n }\n}\n\nasync function removeRegistryUrl(url: string) {\n const current = (await ctx.preferences.get<string[]>('pluginStore.registries')) || []\n const next = current.filter((u) => u !== url)\n await ctx.preferences.set('pluginStore.registries', next)\n registries.value = registries.value.filter((r) => r.registryUrl !== url)\n}\n\nasync function onRemoveRegistry(url: string) {\n const installed =\n (await ctx.preferences.get<{ registry: string; id: string }[]>('pluginStore.plugins')) || []\n const installedOfReg = installed.filter((p) => p.registry === url)\n if (installedOfReg.length === 0) {\n ctx.modal.confirm(\n {\n title: $$`plugin-store.remove-registry.title`,\n content: $$`plugin-store.remove-registry.tip-content` + `\\n${url}`,\n cancelBtn: {\n label: $`Cancel`,\n className: 'is-ghost',\n },\n okBtn: {\n label: $`Remove`,\n className: 'is-danger',\n },\n },\n async (ok) => {\n if (!ok) return\n await removeRegistryUrl(url)\n ctx.modal.notify('success', { content: $$`plugin-store.remove-registry.remove-success` })\n }\n )\n return\n }\n\n ctx.modal.dialog(\n {\n title: $$`plugin-store.remove-registry.title`,\n content: h('div', { class: 'theme-ipe-prose' }, [\n h(\n 'p',\n {},\n $$({ count: installedOfReg.length })`plugin-store.remove-registry.confirm-content`\n ),\n h(\n 'ul',\n {},\n installedOfReg.map((p) => h('li', {}, p.id))\n ),\n ]),\n buttons: [\n {\n label: $$`plugin-store.remove-registry.buttons.remove-only`,\n className: 'is-danger is-ghost',\n method: async (_, m) => {\n await removeRegistryUrl(url)\n ctx.modal.notify('success', {\n content: $$`plugin-store.remove-registry.remove-success`,\n })\n m.close()\n },\n },\n {\n label: $$`plugin-store.remove-registry.buttons.remove-and-uninstall`,\n className: 'is-danger',\n method: async (_, m) => {\n await removeRegistryUrl(url)\n for (const p of installedOfReg) {\n try {\n await ctx.store.uninstallAndRemovePreference(p.registry, p.id)\n } catch (e) {\n // best-effort; notify but continue\n ctx.modal.notify('error', {\n content:\n e instanceof Error\n ? `Failed to uninstall ${p.id}: ${e.message}`\n : `Failed to uninstall ${p.id}`,\n })\n }\n }\n ctx.modal.notify('success', {\n content: $$({\n $1: installedOfReg.length,\n })`plugin-store.remove-registry.remove-with-plugins-success`,\n })\n m.close()\n },\n },\n ],\n },\n () => {}\n )\n}\n\nfunction onPreferencesChanged(payload: { changes: Record<string, unknown> }) {\n const regs = payload.changes['pluginStore.registries'] as string[]\n if (Array.isArray(regs)) {\n loadRegistries()\n }\n}\n\nfunction onAddOfficialRegistry() {\n const url = Endpoints.PLUGIN_REGISTRY_URL\n inputValue.value = url\n onAddRegistry()\n}\n\nonMounted(() => {\n loadRegistries()\n ctx.on('preferences/changed', onPreferencesChanged)\n})\n</script>\n\n<style scoped lang=\"scss\">\n@use './style.scss' as *;\n\n.registry-info {\n flex: 1;\n min-width: 0;\n .homepage {\n margin-top: 0.25rem;\n a {\n color: var(--ipe-modal-accent);\n text-decoration: none;\n font-size: 0.8125rem;\n transition: all 0.2s ease;\n &:hover {\n color: color-mix(in srgb, var(--ipe-modal-accent) 80%, var(--ipe-modal-text));\n text-decoration: underline;\n }\n }\n }\n .url {\n font-family: monospace;\n font-size: 0.75rem;\n color: var(--ipe-modal-muted);\n margin-top: 0.125rem;\n word-break: break-all;\n }\n}\n</style>\n","<template lang=\"pug\">\n#ipe-plugin-install-manager\n .ipeps-header\n .ipeps-header-title {{ $`Plugins` }}\n .ipeps-input-wrapper\n input.ipeps-input.with-icon(\n v-model.trim='searchInput',\n type='text',\n :placeholder='$`Search plugins...`',\n :disabled='!pluginsFromRegistries.length'\n )\n .ipeps-input-icon 🔍\n button.ipeps-button(\n @click='refreshRegistries',\n :disabled='isRefreshing || !hasRegistries',\n :class='{ refreshing: isRefreshing }',\n variant='primary'\n ) {{ isRefreshing ? $`Refreshing...` : $`Refresh` }}\n\n .ipeps-loading(v-if='!hasRegistries && !firstInit')\n .loading-spinner\n .loading-text {{ $`Loading...` }}\n\n .ipeps-list(v-else-if='allPluginsToDisplay.length')\n .ipeps-item(\n v-for='plugin in allPluginsToDisplay',\n :key='plugin._key',\n :class='{ installed: isInstalledKey(plugin._key), broken: plugin.isBroken }'\n )\n .plugin-info\n .plugin-header\n .item-name {{ plugin.name || plugin.id }}\n span.ipeps-badge(\n v-if='isInstalledKey(plugin._key) || plugin.isBroken',\n :class='{ \"is-installed\": isInstalledKey(plugin._key), \"is-broken\": plugin.isBroken }'\n ) {{ plugin.isBroken ? $$`plugin-store.tags.broken` : $$`plugin-store.tags.installed` }}\n .ipeps-tags\n a.ipeps-tag.registry-tag(\n v-if='plugin.registryHomepage && !plugin.isRegistryMissing',\n :href='plugin.registryHomepage',\n target='_blank',\n :title='plugin.registryLabel'\n ) {{ plugin.registryLabel }}\n span.ipeps-tag.registry-tag(\n v-else,\n :title='plugin.registryLabel',\n :class='{ broken: plugin.isRegistryMissing }'\n ) {{ plugin.registryLabel }}\n .plugin-id.ipeps-tag(:class='{ broken: plugin.isBroken && !plugin.isRegistryMissing }') {{ plugin.id }}\n .plugin-desc(:class='{ \"broken-desc\": plugin.isBroken }') {{ getDesc(plugin) }}\n .plugin-meta\n span.version(v-if='plugin.version') v{{ plugin.version }}\n span.author(v-if='plugin.author') 👤 {{ plugin.author }}\n span.license(v-if='plugin.license') 📜 {{ plugin.license }}\n UIBaseButton(\n :active='isInstalledKey(plugin._key)',\n :variant='isInstalledKey(plugin._key) ? \"danger\" : \"primary\"',\n @click='togglePluginByKey(plugin)'\n ) {{ isInstalledKey(plugin._key) ? $`Remove` : $`Install` }}\n\n .ipeps-empty(v-else)\n .plugin-empty-icon 📦\n .plugin-empty-text {{ $`No matching plugins found` }}\n</template>\n\n<script setup lang=\"ts\" vapor>\nimport { computed, onBeforeUnmount, onMounted, ref } from 'vue'\nimport type { PluginStorePackage, PluginStoreRegistry } from '../schema.js'\nimport UIBaseButton from './ui/UIBaseButton.vue'\n\ninterface RegistryWithUrl extends PluginStoreRegistry {\n registryUrl: string\n}\ninterface PluginIdentifier {\n registry: string\n id: string\n}\n\ninterface PluginViewModel extends PluginStorePackage {\n _key: string\n registry: string\n registryHomepage: string\n registryLabel: string\n isBroken: boolean\n isRegistryMissing: boolean\n}\n\n// --- state ---\nconst ctx = useIPE()\nconst $ = ctx.$\nconst $$ = ctx.$$\nconst registryInfos = ref<RegistryWithUrl[]>([])\nconst installedPlugins = ref<PluginIdentifier[]>([])\nconst searchInput = ref('')\nconst isRefreshing = ref(false)\n\n// helpers\nconst makeKey = (r: string, id: string) => `${r}\\n${id}` // stable + O(1)\n\nconst installedKeySet = computed(\n () => new Set(installedPlugins.value.map((p) => makeKey(p.registry, p.id)))\n)\nconst isInstalledKey = (key: string) => installedKeySet.value.has(key)\n\nconst urlToLabel = (registryUrl: string) => {\n try {\n return new URL(registryUrl).hostname\n } catch {\n return registryUrl\n }\n}\n\nconst firstInit = ref(false)\nconst hasRegistries = computed(() => registryInfos.value.length > 0)\n\nconst pluginsFromRegistries = computed<PluginViewModel[]>(\n () =>\n registryInfos.value.flatMap((reg) =>\n (reg.packages || []).map((pkg) => ({\n ...pkg,\n _key: makeKey(reg.registryUrl, pkg.id),\n registry: reg.registryUrl,\n registryHomepage: reg.homepage,\n registryLabel: urlToLabel(reg.registryUrl),\n isBroken: false,\n isRegistryMissing: false,\n }))\n ) as PluginViewModel[]\n)\n\n// merge normal + broken, and normalize once here\nconst normalizedPlugins = computed(() => {\n const q = searchInput.value.trim().toLowerCase()\n\n const all: Array<any> = pluginsFromRegistries.value\n\n // broken installed plugins (installed but not available now)\n const availableKeys = new Set(all.map((p) => p._key))\n const availableRegs = new Set(registryInfos.value.map((r) => r.registryUrl))\n\n const broken = installedPlugins.value\n .filter((p) => !availableKeys.has(makeKey(p.registry, p.id)))\n .map((p) => {\n const regInfo = registryInfos.value.find((r) => r.registryUrl === p.registry)\n return {\n id: p.id,\n name: undefined,\n description: undefined,\n version: undefined,\n author: undefined,\n license: undefined,\n _key: makeKey(p.registry, p.id),\n registry: p.registry,\n registryHomepage: regInfo?.homepage,\n registryLabel: urlToLabel(p.registry),\n isBroken: true,\n isRegistryMissing: !availableRegs.has(p.registry),\n }\n })\n\n const filtered = (list: any[]) => {\n if (!q) return list\n return list.filter(\n (p) =>\n (p.name && p.name.toLowerCase().includes(q)) ||\n (p.id && p.id.toLowerCase().includes(q)) ||\n (p.description && p.description.toLowerCase().includes(q)) ||\n (p.author && p.author.toLowerCase().includes(q)) ||\n (p.registry && p.registry.toLowerCase().includes(q))\n )\n }\n\n // broken on top\n return [...filtered(broken), ...filtered(all)]\n})\n\nconst allPluginsToDisplay = computed(() => normalizedPlugins.value)\n\nconst getDesc = (p: any) => {\n if (p.description) return p.description\n if (!p.isBroken) return ''\n return p.isRegistryMissing\n ? $$`plugin-store.broken.registry-unavailable`\n : $$`plugin-store.broken.plugin-removed`\n}\n\n// actions\nconst enablePlugin = async (registry: string, id: string) => {\n ctx.store.installAndSetPreference(registry, id)\n}\nconst disablePlugin = async (registry: string, id: string) => {\n ctx.store.uninstallAndRemovePreference(registry, id)\n}\nconst togglePlugin = (registry: string, id: string) =>\n isInstalledKey(makeKey(registry, id)) ? disablePlugin(registry, id) : enablePlugin(registry, id)\nconst togglePluginByKey = (p: any) => togglePlugin(p.registry, p.id)\n\nconst refreshRegistries = async () => {\n if (isRefreshing.value) return\n if (registryInfos.value.length === 0) {\n ctx.modal.notify('info', {\n content: 'No registry configured. Please add a registry first.',\n })\n return\n }\n\n isRefreshing.value = true\n const results = await ctx.store.refreshAllRegistryCaches()\n const okResults = Object.entries(results).filter(([_, r]) => r !== null)\n registryInfos.value = okResults.map(([url, r]) => ({\n ...r!,\n registryUrl: url,\n }))\n const failedUrls = Object.entries(results)\n .filter(([_, r]) => r === null)\n .map(([url]) => url)\n isRefreshing.value = false\n\n if (okResults.length === 0) {\n ctx.modal.notify('error', {\n content: 'All registries failed to refresh',\n })\n } else {\n ctx.modal.notify('success', {\n content: `${okResults.length} ${okResults.length === 1 ? 'registry' : 'registries'} refreshed successfully.`,\n })\n if (failedUrls.length > 0) {\n ctx.modal.notify('warning', {\n content: `${failedUrls.length} ${failedUrls.length === 1 ? 'registry' : 'registries'} failed to refresh:\\n${failedUrls.join('\\n')}`,\n })\n }\n }\n}\n\n// init\nconst init = async () => {\n firstInit.value = false\n const urls = (await ctx.store.ctx.preferences.get('pluginStore.registries')) || []\n const regResults = await Promise.allSettled(\n urls.map(async (url: string) => ({\n ...(await ctx.store.getRegistryInfo(url)),\n registryUrl: url,\n }))\n )\n registryInfos.value = regResults\n .filter((r) => r.status === 'fulfilled')\n .map((r) => (r as PromiseFulfilledResult<RegistryWithUrl>).value)\n\n installedPlugins.value = (await ctx.preferences.get('pluginStore.plugins')) || []\n\n firstInit.value = true\n}\n\nfunction onPreferencesChanged(payload: { changes: Record<string, unknown> }) {\n const regs = payload.changes['pluginStore.registries'] as string[]\n const plugins = payload.changes['pluginStore.plugins'] as PluginIdentifier[]\n if (Array.isArray(plugins)) installedPlugins.value = plugins\n if (Array.isArray(regs)) {\n init()\n }\n}\n\nonMounted(() => {\n init()\n ctx.on('preferences/changed', onPreferencesChanged)\n})\nonBeforeUnmount(() => {})\n</script>\n\n<style scoped lang=\"scss\">\n@use './style.scss' as *;\n\n.plugin-info {\n flex: 1;\n min-width: 0;\n}\n.plugin-header {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n margin-bottom: 0.375rem;\n}\n.registry-tag {\n color: var(--ipe-modal-accent);\n background: color-mix(in srgb, var(--ipe-modal-accent) 8%, transparent);\n border: 1px solid color-mix(in srgb, var(--ipe-modal-accent) 18%, transparent);\n text-decoration: none;\n transition: all 0.2s ease;\n &:hover {\n background: color-mix(in srgb, var(--ipe-modal-accent) 12%, transparent);\n border-color: color-mix(in srgb, var(--ipe-modal-accent) 30%, transparent);\n }\n &.broken {\n text-decoration: line-through;\n opacity: 0.65;\n cursor: not-allowed;\n }\n}\n.plugin-id {\n &.broken {\n opacity: 0.65;\n text-decoration: line-through;\n }\n}\n.plugin-desc {\n font-size: 0.8125rem;\n color: var(--ipe-modal-muted);\n margin-bottom: 0.5rem;\n line-height: 1.6;\n &.broken-desc {\n color: color-mix(in srgb, var(--ipe-modal-warning) 80%, var(--ipe-modal-text));\n font-style: italic;\n }\n}\n.plugin-meta {\n font-size: 0.75rem;\n color: var(--ipe-modal-muted);\n display: flex;\n gap: 1rem;\n align-items: center;\n .version {\n font-family: monospace;\n font-weight: 500;\n color: color-mix(in srgb, var(--ipe-modal-text) 80%, var(--ipe-modal-muted));\n }\n .author {\n display: flex;\n align-items: center;\n gap: 0.25rem;\n }\n .license {\n display: flex;\n align-items: center;\n gap: 0.25rem;\n }\n}\n</style>\n"],"names":["props","__props","buttonClass","computed","ctx","useIPE","$","$$","registries","ref","inputValue","isAdding","urlToLabel","u","loadRegistries","urls","results","url","info","r","onAddRegistry","current","e","removeRegistryUrl","next","onRemoveRegistry","installedOfReg","p","ok","h","_","m","onPreferencesChanged","payload","regs","onAddOfficialRegistry","Endpoints","onMounted","registryInfos","installedPlugins","searchInput","isRefreshing","makeKey","id","installedKeySet","isInstalledKey","key","registryUrl","firstInit","hasRegistries","pluginsFromRegistries","reg","pkg","normalizedPlugins","q","all","availableKeys","availableRegs","broken","regInfo","filtered","list","allPluginsToDisplay","getDesc","enablePlugin","registry","disablePlugin","togglePlugin","togglePluginByKey","refreshRegistries","okResults","failedUrls","init","regResults","plugins","onBeforeUnmount"],"mappings":"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"}
@@ -1,20 +1,20 @@
1
- import { j as d } from "./index-CM_6yF2v.js";
2
- import { B as y } from "./BasePlugin-BCVSn9QJ.js";
3
- import { I as E } from "./Preferences-DqtjY7XU.js";
4
- var S = Object.create, m = Object.defineProperty, U = Object.getOwnPropertyDescriptor, k = (e, t) => (t = Symbol[e]) ? t : Symbol.for("Symbol." + e), f = (e) => {
1
+ import { j as d } from "./Promise.withResolvers-C4chhLB1.js";
2
+ import { a as y } from "./index-QnWieXQc.js";
3
+ import { BasePlugin as E } from "./core.js";
4
+ var S = Object.create, m = Object.defineProperty, U = Object.getOwnPropertyDescriptor, k = (e, t) => (t = Symbol[e]) ? t : /* @__PURE__ */ Symbol.for("Symbol." + e), f = (e) => {
5
5
  throw TypeError(e);
6
- }, T = (e, t, r) => t in e ? m(e, t, { enumerable: !0, configurable: !0, writable: !0, value: r }) : e[t] = r, j = (e, t) => m(e, "name", { value: t, configurable: !0 }), q = (e) => [, , , S(e?.[k("metadata")] ?? null)], z = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"], w = (e) => e !== void 0 && typeof e != "function" ? f("Function expected") : e, C = (e, t, r, a, i) => ({ kind: z[e], name: t, metadata: a, addInitializer: (s) => r._ ? f("Already initialized") : i.push(w(s || null)) }), I = (e, t) => T(t, k("metadata"), e[3]), O = (e, t, r, a) => {
6
+ }, T = (e, t, r) => t in e ? m(e, t, { enumerable: !0, configurable: !0, writable: !0, value: r }) : e[t] = r, j = (e, t) => m(e, "name", { value: t, configurable: !0 }), q = (e) => [, , , S(e?.[k("metadata")] ?? null)], z = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"], w = (e) => e !== void 0 && typeof e != "function" ? f("Function expected") : e, C = (e, t, r, a, i) => ({ kind: z[e], name: t, metadata: a, addInitializer: (s) => r._ ? f("Already initialized") : i.push(w(s || null)) }), O = (e, t) => T(t, k("metadata"), e[3]), F = (e, t, r, a) => {
7
7
  for (var i = 0, s = e[t >> 1], o = s && s.length; i < o; i++) s[i].call(r);
8
8
  return a;
9
- }, B = (e, t, r, a, i, s) => {
9
+ }, I = (e, t, r, a, i, s) => {
10
10
  var o, n, l, c = t & 7, g = !1, v = 0, P = e[v] || (e[v] = []), u = c && (i = i.prototype, c < 5 && (c > 3 || !g) && U(i, r));
11
11
  j(i, r);
12
12
  for (var p = a.length - 1; p >= 0; p--)
13
13
  l = C(c, r, n = {}, e[3], P), o = (0, a[p])(i, l), n._ = 1, w(o) && (i = o);
14
- return I(e, i), u && m(i, r, u), g ? c ^ 4 ? s : u : i;
14
+ return O(e, i), u && m(i, r, u), g ? c ^ 4 ? s : u : i;
15
15
  }, x, h, b;
16
- x = [E(["modal", "$"])];
17
- class _ extends (b = y) {
16
+ x = [y(["modal", "$"])];
17
+ class _ extends (b = E) {
18
18
  constructor(t) {
19
19
  super(t, {}, "templates-used"), this.ctx = t, t.set("templatesUsed", this);
20
20
  }
@@ -68,9 +68,9 @@ class _ extends (b = y) {
68
68
  }
69
69
  }
70
70
  h = q(b);
71
- _ = B(h, 0, "PluginTemplatesUsed", x, _);
72
- O(h, 1, _);
71
+ _ = I(h, 0, "PluginTemplatesUsed", x, _);
72
+ F(h, 1, _);
73
73
  export {
74
74
  _ as PluginTemplatesUsed
75
75
  };
76
- //# sourceMappingURL=PluginTemplatesUsed-DS_rHctR.js.map
76
+ //# sourceMappingURL=PluginTemplatesUsed-CdjT1wR4.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PluginTemplatesUsed-DS_rHctR.js","sources":["../src/plugins/quick-usage/PluginTemplatesUsed.tsx"],"sourcesContent":["import { Inject, InPageEdit } from '@/InPageEdit'\nimport { IWikiPage } from '@/models/index.js'\nimport { QuickEditEventPayload } from '../quick-edit/index.js'\n\ndeclare module '@/InPageEdit' {\n interface InPageEdit {\n templatesUsed: PluginTemplatesUsed\n }\n}\n\nexport interface PluginTemplatesUsedOptions {\n wikiPage?: IWikiPage\n title?: string\n pageId?: number\n revision?: number\n}\n\n@Inject(['modal', '$'])\nexport class PluginTemplatesUsed extends BasePlugin {\n constructor(public ctx: InPageEdit) {\n super(ctx, {}, 'templates-used')\n ctx.set('templatesUsed', this)\n }\n\n protected async start() {\n this.ctx.on('quick-edit/wiki-page', this._injectQuickEdit.bind(this))\n }\n\n private _injectQuickEdit(payload: QuickEditEventPayload) {\n const { $ } = this.ctx\n const { wikiPage, modal } = payload\n if (!wikiPage || !wikiPage.pageid) return\n const wrapper = this.ctx.quickUsage.getWrapperForQuickEdit(modal)\n const link = (\n <a\n href={`#ipe://quick-usage/templates?title=${wikiPage.title}`}\n onClick={async (e) => {\n e.preventDefault()\n const usageModal = await this.showModal({ wikiPage })\n if (usageModal) {\n modal.on(modal.Event.Close, () => {\n usageModal.destroy()\n })\n }\n }}\n >{$`Templates Used`}</a>\n )\n wrapper.appendChild(link)\n }\n\n async showModal(options: PluginTemplatesUsedOptions = {}) {\n const { $ } = this.ctx\n\n const wikiPage = options.wikiPage || (await this.ctx.wikiPage.WikiPage.newFromAnyKind(options))\n if (!wikiPage || !wikiPage.pageid) return\n\n const modal = this.ctx.modal.show({\n title: $`Templates Used`,\n content: (\n <section className=\"ipe-quickUsage__templates\">\n <ol>\n {wikiPage.templates.map((template) => {\n const title = this.ctx.wikiTitle.newTitle(template.title, template.ns)\n const quickEditButton = this.ctx.quickEdit.createQuickEditButton(\n {\n title: title.toString(),\n },\n { label: '' }\n )\n return (\n <li key={title.toString()}>\n <a href={title.getURL().toString()} target=\"_blank\" rel=\"noopener noreferrer\">\n {title.toString()}\n </a>{' '}\n ({quickEditButton})\n </li>\n )\n })}\n </ol>\n </section>\n ),\n sizeClass: 'dialog',\n draggable: true,\n backdrop: false,\n })\n\n this.ctx.emit('analytics/event', { feature: 'quick-usage', subtype: 'templates-used' })\n\n return modal\n }\n}\n"],"names":["_PluginTemplatesUsed_decorators","_init","_a","Inject","PluginTemplatesUsed","BasePlugin","ctx","payload","$","wikiPage","modal","wrapper","link","jsx","e","usageModal","options","template","title","quickEditButton","__decoratorStart","__decorateElement","__runInitializers"],"mappings":";;;;;;;;;;;;;;GAAAA,GAAAC,GAAAC;AAiBAF,IAAA,CAACG,EAAO,CAAC,SAAS,GAAG,CAAC,CAAA;AACf,MAAMC,WAA4BF,IAAAG,GAAW;AAAA,EAClD,YAAmBC,GAAiB;AAClC,UAAMA,GAAK,CAAA,GAAI,gBAAgB,GADd,KAAA,MAAAA,GAEjBA,EAAI,IAAI,iBAAiB,IAAI;AAAA,EAC/B;AAAA,EAEA,MAAgB,QAAQ;AACtB,SAAK,IAAI,GAAG,wBAAwB,KAAK,iBAAiB,KAAK,IAAI,CAAC;AAAA,EACtE;AAAA,EAEQ,iBAAiBC,GAAgC;AACvD,UAAM,EAAE,GAAAC,MAAM,KAAK,KACb,EAAE,UAAAC,GAAU,OAAAC,EAAA,IAAUH;AAC5B,QAAI,CAACE,KAAY,CAACA,EAAS,OAAQ;AACnC,UAAME,IAAU,KAAK,IAAI,WAAW,uBAAuBD,CAAK,GAC1DE,IACJ,gBAAAC;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAM,sCAAsCJ,EAAS,KAAK;AAAA,QAC1D,SAAS,OAAOK,MAAM;AACpB,UAAAA,EAAE,eAAA;AACF,gBAAMC,IAAa,MAAM,KAAK,UAAU,EAAE,UAAAN,GAAU;AACpD,UAAIM,KACFL,EAAM,GAAGA,EAAM,MAAM,OAAO,MAAM;AAChC,YAAAK,EAAW,QAAA;AAAA,UACb,CAAC;AAAA,QAEL;AAAA,QACA,UAAAP;AAAA,MAAA;AAAA,IAAA;AAEJ,IAAAG,EAAQ,YAAYC,CAAI;AAAA,EAC1B;AAAA,EAEA,MAAM,UAAUI,IAAsC,IAAI;AACxD,UAAM,EAAE,GAAAR,MAAM,KAAK,KAEbC,IAAWO,EAAQ,YAAa,MAAM,KAAK,IAAI,SAAS,SAAS,eAAeA,CAAO;AAC7F,QAAI,CAACP,KAAY,CAACA,EAAS,OAAQ;AAEnC,UAAMC,IAAQ,KAAK,IAAI,MAAM,KAAK;AAAA,MAChC,OAAOF;AAAA,MACP,SACE,gBAAAK,EAAC,WAAA,EAAQ,WAAU,6BACjB,UAAA,gBAAAA,EAAC,MAAA,EACE,UAAAJ,EAAS,UAAU,IAAI,CAACQ,MAAa;AACpC,cAAMC,IAAQ,KAAK,IAAI,UAAU,SAASD,EAAS,OAAOA,EAAS,EAAE,GAC/DE,IAAkB,KAAK,IAAI,UAAU;AAAA,UACzC;AAAA,YACE,OAAOD,EAAM,SAAA;AAAA,UAAS;AAAA,UAExB,EAAE,OAAO,GAAA;AAAA,QAAG;AAEd,iCACG,MAAA,EACC,UAAA;AAAA,UAAA,gBAAAL,EAAC,KAAA,EAAE,MAAMK,EAAM,OAAA,EAAS,SAAA,GAAY,QAAO,UAAS,KAAI,uBACrD,UAAAA,EAAM,YACT;AAAA,UAAK;AAAA,UAAI;AAAA,UACPC;AAAA,UAAgB;AAAA,QAAA,KAJXD,EAAM,UAKf;AAAA,MAEJ,CAAC,GACH,GACF;AAAA,MAEF,WAAW;AAAA,MACX,WAAW;AAAA,MACX,UAAU;AAAA,IAAA,CACX;AAED,gBAAK,IAAI,KAAK,mBAAmB,EAAE,SAAS,eAAe,SAAS,kBAAkB,GAE/ER;AAAA,EACT;AACF;AAxEOT,IAAAmB,EAAAlB,CAAA;AAAME,IAANiB,+BADPrB,GACaI,CAAA;AAANkB,EAAArB,GAAA,GAAMG,CAAA;"}
1
+ {"version":3,"file":"PluginTemplatesUsed-CdjT1wR4.js","sources":["../src/plugins/quick-usage/PluginTemplatesUsed.tsx"],"sourcesContent":["import { Inject, InPageEdit } from '@/InPageEdit'\nimport { IWikiPage } from '@/models/index.js'\nimport { QuickEditEventPayload } from '../quick-edit/index.js'\n\ndeclare module '@/InPageEdit' {\n interface InPageEdit {\n templatesUsed: PluginTemplatesUsed\n }\n}\n\nexport interface PluginTemplatesUsedOptions {\n wikiPage?: IWikiPage\n title?: string\n pageId?: number\n revision?: number\n}\n\n@Inject(['modal', '$'])\nexport class PluginTemplatesUsed extends BasePlugin {\n constructor(public ctx: InPageEdit) {\n super(ctx, {}, 'templates-used')\n ctx.set('templatesUsed', this)\n }\n\n protected async start() {\n this.ctx.on('quick-edit/wiki-page', this._injectQuickEdit.bind(this))\n }\n\n private _injectQuickEdit(payload: QuickEditEventPayload) {\n const { $ } = this.ctx\n const { wikiPage, modal } = payload\n if (!wikiPage || !wikiPage.pageid) return\n const wrapper = this.ctx.quickUsage.getWrapperForQuickEdit(modal)\n const link = (\n <a\n href={`#ipe://quick-usage/templates?title=${wikiPage.title}`}\n onClick={async (e) => {\n e.preventDefault()\n const usageModal = await this.showModal({ wikiPage })\n if (usageModal) {\n modal.on(modal.Event.Close, () => {\n usageModal.destroy()\n })\n }\n }}\n >{$`Templates Used`}</a>\n )\n wrapper.appendChild(link)\n }\n\n async showModal(options: PluginTemplatesUsedOptions = {}) {\n const { $ } = this.ctx\n\n const wikiPage = options.wikiPage || (await this.ctx.wikiPage.WikiPage.newFromAnyKind(options))\n if (!wikiPage || !wikiPage.pageid) return\n\n const modal = this.ctx.modal.show({\n title: $`Templates Used`,\n content: (\n <section className=\"ipe-quickUsage__templates\">\n <ol>\n {wikiPage.templates.map((template) => {\n const title = this.ctx.wikiTitle.newTitle(template.title, template.ns)\n const quickEditButton = this.ctx.quickEdit.createQuickEditButton(\n {\n title: title.toString(),\n },\n { label: '' }\n )\n return (\n <li key={title.toString()}>\n <a href={title.getURL().toString()} target=\"_blank\" rel=\"noopener noreferrer\">\n {title.toString()}\n </a>{' '}\n ({quickEditButton})\n </li>\n )\n })}\n </ol>\n </section>\n ),\n sizeClass: 'dialog',\n draggable: true,\n backdrop: false,\n })\n\n this.ctx.emit('analytics/event', { feature: 'quick-usage', subtype: 'templates-used' })\n\n return modal\n }\n}\n"],"names":["_PluginTemplatesUsed_decorators","_init","_a","Inject","PluginTemplatesUsed","BasePlugin","ctx","payload","$","wikiPage","modal","wrapper","link","jsx","e","usageModal","options","template","title","quickEditButton","__decoratorStart","__decorateElement","__runInitializers"],"mappings":";;;;;;;;;;;;;;GAAAA,GAAAC,GAAAC;AAiBAF,IAAA,CAACG,EAAO,CAAC,SAAS,GAAG,CAAC,CAAA;AACf,MAAMC,WAA4BF,IAAAG,GAAW;AAAA,EAClD,YAAmBC,GAAiB;AAClC,UAAMA,GAAK,CAAA,GAAI,gBAAgB,GADd,KAAA,MAAAA,GAEjBA,EAAI,IAAI,iBAAiB,IAAI;AAAA,EAC/B;AAAA,EAEA,MAAgB,QAAQ;AACtB,SAAK,IAAI,GAAG,wBAAwB,KAAK,iBAAiB,KAAK,IAAI,CAAC;AAAA,EACtE;AAAA,EAEQ,iBAAiBC,GAAgC;AACvD,UAAM,EAAE,GAAAC,MAAM,KAAK,KACb,EAAE,UAAAC,GAAU,OAAAC,EAAA,IAAUH;AAC5B,QAAI,CAACE,KAAY,CAACA,EAAS,OAAQ;AACnC,UAAME,IAAU,KAAK,IAAI,WAAW,uBAAuBD,CAAK,GAC1DE,IACJ,gBAAAC;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAM,sCAAsCJ,EAAS,KAAK;AAAA,QAC1D,SAAS,OAAOK,MAAM;AACpB,UAAAA,EAAE,eAAA;AACF,gBAAMC,IAAa,MAAM,KAAK,UAAU,EAAE,UAAAN,GAAU;AACpD,UAAIM,KACFL,EAAM,GAAGA,EAAM,MAAM,OAAO,MAAM;AAChC,YAAAK,EAAW,QAAA;AAAA,UACb,CAAC;AAAA,QAEL;AAAA,QACA,UAAAP;AAAA,MAAA;AAAA,IAAA;AAEJ,IAAAG,EAAQ,YAAYC,CAAI;AAAA,EAC1B;AAAA,EAEA,MAAM,UAAUI,IAAsC,IAAI;AACxD,UAAM,EAAE,GAAAR,MAAM,KAAK,KAEbC,IAAWO,EAAQ,YAAa,MAAM,KAAK,IAAI,SAAS,SAAS,eAAeA,CAAO;AAC7F,QAAI,CAACP,KAAY,CAACA,EAAS,OAAQ;AAEnC,UAAMC,IAAQ,KAAK,IAAI,MAAM,KAAK;AAAA,MAChC,OAAOF;AAAA,MACP,SACE,gBAAAK,EAAC,WAAA,EAAQ,WAAU,6BACjB,UAAA,gBAAAA,EAAC,MAAA,EACE,UAAAJ,EAAS,UAAU,IAAI,CAACQ,MAAa;AACpC,cAAMC,IAAQ,KAAK,IAAI,UAAU,SAASD,EAAS,OAAOA,EAAS,EAAE,GAC/DE,IAAkB,KAAK,IAAI,UAAU;AAAA,UACzC;AAAA,YACE,OAAOD,EAAM,SAAA;AAAA,UAAS;AAAA,UAExB,EAAE,OAAO,GAAA;AAAA,QAAG;AAEd,iCACG,MAAA,EACC,UAAA;AAAA,UAAA,gBAAAL,EAAC,KAAA,EAAE,MAAMK,EAAM,OAAA,EAAS,SAAA,GAAY,QAAO,UAAS,KAAI,uBACrD,UAAAA,EAAM,YACT;AAAA,UAAK;AAAA,UAAI;AAAA,UACPC;AAAA,UAAgB;AAAA,QAAA,KAJXD,EAAM,UAKf;AAAA,MAEJ,CAAC,GACH,GACF;AAAA,MAEF,WAAW;AAAA,MACX,WAAW;AAAA,MACX,UAAU;AAAA,IAAA,CACX;AAED,gBAAK,IAAI,KAAK,mBAAmB,EAAE,SAAS,eAAe,SAAS,kBAAkB,GAE/ER;AAAA,EACT;AACF;AAxEOT,IAAAmB,EAAAlB,CAAA;AAAME,IAANiB,+BADPrB,GACaI,CAAA;AAANkB,EAAArB,GAAA,GAAMG,CAAA;"}
@@ -17,10 +17,10 @@ function i(e) {
17
17
  function a(e) {
18
18
  return typeof e == "function";
19
19
  }
20
- function N(e) {
20
+ function R(e) {
21
21
  return !!(e && e.isComponent);
22
22
  }
23
- function R(e) {
23
+ function N(e) {
24
24
  return i(e) && typeof e.length == "number" && typeof e.nodeType != "number";
25
25
  }
26
26
  function d(e, t) {
@@ -85,7 +85,7 @@ u(h).forEach((e) => {
85
85
  h[P(t, e)] = 0;
86
86
  });
87
87
  });
88
- const I = Symbol.for("jsx-dom:type");
88
+ const I = /* @__PURE__ */ Symbol.for("jsx-dom:type");
89
89
  var C = /* @__PURE__ */ (function(e) {
90
90
  return e.ShadowRoot = "ShadowRoot", e;
91
91
  })(C || {});
@@ -175,7 +175,7 @@ function A(e, t) {
175
175
  });
176
176
  let s;
177
177
  if (p(e)) {
178
- if (s = r.namespaceURI ? document.createElementNS(r.namespaceURI, e) : document.createElement(e), W(r, s), m(n, s), s instanceof window.HTMLSelectElement && r.value != null)
178
+ if (s = r.namespaceURI ? document.createElementNS(r.namespaceURI, e) : document.createElement(e), z(r, s), m(n, s), s instanceof window.HTMLSelectElement && r.value != null)
179
179
  if (r.multiple === !0 && Array.isArray(r.value)) {
180
180
  const f = r.value.map((o) => String(o));
181
181
  s.querySelectorAll("option").forEach(
@@ -188,7 +188,7 @@ function A(e, t) {
188
188
  i(e.defaultProps) && (r = {
189
189
  ...e.defaultProps,
190
190
  ...r
191
- }), s = N(e) ? B(e, r, n) : e({
191
+ }), s = R(e) ? B(e, r, n) : e({
192
192
  ...r,
193
193
  children: n
194
194
  });
@@ -212,7 +212,7 @@ function x(e, t) {
212
212
  M(e) ? e.current = t : a(e) && e(t);
213
213
  }
214
214
  function m(e, t) {
215
- if (R(e))
215
+ if (N(e))
216
216
  D(e, t);
217
217
  else if (p(e) || y(e))
218
218
  g(document.createTextNode(e), t);
@@ -241,7 +241,7 @@ function E(e, t) {
241
241
  r.indexOf("-") === 0 ? e.style.setProperty(r, n) : y(n) && h[r] !== 0 ? e.style[r] = n + "px" : e.style[r] = n;
242
242
  }));
243
243
  }
244
- function z(e, t, n) {
244
+ function W(e, t, n) {
245
245
  switch (e) {
246
246
  case "xlinkActuate":
247
247
  case "xlinkArcrole":
@@ -331,9 +331,9 @@ function c(e, t, n) {
331
331
  function b(e, t, n, r) {
332
332
  e.setAttributeNS(t, n, r);
333
333
  }
334
- function W(e, t) {
334
+ function z(e, t) {
335
335
  for (const n of u(e))
336
- z(n, e[n], t);
336
+ W(n, e[n], t);
337
337
  return t;
338
338
  }
339
339
  const X = "_ipe_progress_so6hn_1", $ = {
@@ -351,11 +351,17 @@ const X = "_ipe_progress_so6hn_1", $ = {
351
351
  return n.setProgress = (r) => {
352
352
  typeof r == "number" ? (n.dataset.indeterminate = "false", n.style.setProperty("--progress", `${r}%`)) : (n.dataset.indeterminate = "true", n.style.setProperty("--progress", "0%"));
353
353
  }, n;
354
+ }, J = () => {
355
+ let e, t;
356
+ return { promise: new Promise((r, s) => {
357
+ e = r, t = s;
358
+ }), resolve: e, reject: t };
354
359
  };
355
360
  export {
356
361
  _ as F,
357
362
  q as P,
358
363
  V as c,
359
- A as j
364
+ A as j,
365
+ J as p
360
366
  };
361
- //# sourceMappingURL=index-CM_6yF2v.js.map
367
+ //# sourceMappingURL=Promise.withResolvers-C4chhLB1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Promise.withResolvers-C4chhLB1.js","sources":["../../../node_modules/.pnpm/jsx-dom@8.1.6/node_modules/jsx-dom/index.js","../src/components/ProgressBar/index.tsx","../src/polyfills/Promise.withResolvers.ts"],"sourcesContent":["/* eslint-disable */\nconst keys = Object.keys;\nfunction identity(value) {\n return value;\n}\nfunction isBoolean(val) {\n return typeof val === \"boolean\";\n}\nfunction isElement(val) {\n return val && typeof val.nodeType === \"number\";\n}\nfunction isString(val) {\n return typeof val === \"string\";\n}\nfunction isNumber(val) {\n return typeof val === \"number\";\n}\nfunction isObject(val) {\n return typeof val === \"object\" ? val !== null : isFunction(val);\n}\nfunction isFunction(val) {\n return typeof val === \"function\";\n}\nfunction isComponentClass(Component) {\n return !!(Component && Component.isComponent);\n}\nfunction isArrayLike(obj) {\n return (\n isObject(obj) &&\n typeof obj.length === \"number\" &&\n typeof obj.nodeType !== \"number\"\n );\n}\nfunction forEach(value, fn) {\n if (!value) return;\n for (const key of keys(value)) {\n fn(value[key], key);\n }\n}\n\nfunction createRef() {\n return Object.seal({\n current: null,\n });\n}\nfunction isRef(maybeRef) {\n return isObject(maybeRef) && \"current\" in maybeRef;\n}\n\n/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found on\n * https://github.com/facebook/react/blob/b87aabdfe1b7461e7331abb3601d9e6bb27544bc/LICENSE\n */\n\n/**\n * CSS properties which accept numbers but are not in units of \"px\".\n */\nconst isUnitlessNumber = {\n animationIterationCount: 0,\n borderImageOutset: 0,\n borderImageSlice: 0,\n borderImageWidth: 0,\n boxFlex: 0,\n boxFlexGroup: 0,\n boxOrdinalGroup: 0,\n columnCount: 0,\n columns: 0,\n flex: 0,\n flexGrow: 0,\n flexPositive: 0,\n flexShrink: 0,\n flexNegative: 0,\n flexOrder: 0,\n gridArea: 0,\n gridRow: 0,\n gridRowEnd: 0,\n gridRowSpan: 0,\n gridRowStart: 0,\n gridColumn: 0,\n gridColumnEnd: 0,\n gridColumnSpan: 0,\n gridColumnStart: 0,\n fontWeight: 0,\n lineClamp: 0,\n lineHeight: 0,\n opacity: 0,\n order: 0,\n orphans: 0,\n tabSize: 0,\n widows: 0,\n zIndex: 0,\n zoom: 0,\n // SVG-related properties\n fillOpacity: 0,\n floodOpacity: 0,\n stopOpacity: 0,\n strokeDasharray: 0,\n strokeDashoffset: 0,\n strokeMiterlimit: 0,\n strokeOpacity: 0,\n strokeWidth: 0,\n};\n\n/**\n * @param prefix vendor-specific prefix, eg: Webkit\n * @param key style name, eg: transitionDuration\n * @return style name prefixed with `prefix`, properly camelCased, eg:\n * WebkitTransitionDuration\n */\nfunction prefixKey(prefix, key) {\n return prefix + key.charAt(0).toUpperCase() + key.substring(1);\n}\n\n/**\n * Support style names that may come passed in prefixed by adding permutations\n * of vendor prefixes.\n */\nconst prefixes = [\"Webkit\", \"ms\", \"Moz\", \"O\"];\n// Using Object.keys here, or else the vanilla for-in loop makes IE8 go into an\n// infinite loop, because it iterates over the newly added props too.\nkeys(isUnitlessNumber).forEach((prop) => {\n prefixes.forEach((prefix) => {\n isUnitlessNumber[prefixKey(prefix, prop)] = 0; // isUnitlessNumber[prop]\n });\n});\n\nconst jsxDomType = Symbol.for(\"jsx-dom:type\");\nvar JsxDomType = /*#__PURE__*/ (function (JsxDomType) {\n JsxDomType[\"ShadowRoot\"] = \"ShadowRoot\";\n return JsxDomType;\n})(JsxDomType || {});\nfunction ShadowRoot(_ref) {\n let { children, ref, ...attr } = _ref;\n return {\n [jsxDomType]: JsxDomType.ShadowRoot,\n ref,\n attr,\n children,\n };\n}\nfunction isShadowRoot(el) {\n return el != null && el[jsxDomType] === JsxDomType.ShadowRoot;\n}\n\nconst SVGNamespace = \"http://www.w3.org/2000/svg\";\nconst XLinkNamespace = \"http://www.w3.org/1999/xlink\";\nconst XMLNamespace = \"http://www.w3.org/XML/1998/namespace\";\n\n// https://facebook.github.io/react/docs/jsx-in-depth.html#booleans-null-and-undefined-are-ignored\n// Emulate JSX Expression logic to ignore certain type of children or className.\nfunction isVisibleChild(value) {\n return !isBoolean(value) && value != null;\n}\n\n/**\n * Convert a `value` to a className string.\n * `value` can be a string, an array or a `Dictionary<boolean>`.\n */\nfunction className(value) {\n if (Array.isArray(value)) {\n return value.map(className).filter(Boolean).join(\" \");\n } else if (isObject(value)) {\n if (Symbol.iterator in value) {\n return className(Array.from(value));\n }\n return keys(value)\n .filter((k) => value[k])\n .join(\" \");\n } else if (isVisibleChild(value)) {\n return \"\" + value;\n } else {\n return \"\";\n }\n}\nconst svg = {\n animate: 0,\n circle: 0,\n clipPath: 0,\n defs: 0,\n desc: 0,\n ellipse: 0,\n feBlend: 0,\n feColorMatrix: 0,\n feComponentTransfer: 0,\n feComposite: 0,\n feConvolveMatrix: 0,\n feDiffuseLighting: 0,\n feDisplacementMap: 0,\n feDistantLight: 0,\n feFlood: 0,\n feFuncA: 0,\n feFuncB: 0,\n feFuncG: 0,\n feFuncR: 0,\n feGaussianBlur: 0,\n feImage: 0,\n feMerge: 0,\n feMergeNode: 0,\n feMorphology: 0,\n feOffset: 0,\n fePointLight: 0,\n feSpecularLighting: 0,\n feSpotLight: 0,\n feTile: 0,\n feTurbulence: 0,\n filter: 0,\n foreignObject: 0,\n g: 0,\n image: 0,\n line: 0,\n linearGradient: 0,\n marker: 0,\n mask: 0,\n metadata: 0,\n path: 0,\n pattern: 0,\n polygon: 0,\n polyline: 0,\n radialGradient: 0,\n rect: 0,\n stop: 0,\n svg: 0,\n switch: 0,\n symbol: 0,\n text: 0,\n textPath: 0,\n tspan: 0,\n use: 0,\n view: 0,\n};\nconst nonPresentationSVGAttributes =\n /^(a(ll|t|u)|base[FP]|c(al|lipPathU|on)|di|ed|ex|filter[RU]|g(lyphR|r)|ke|l(en|im)|ma(rker[HUW]|s)|n|pat|pr|point[^e]|re[^n]|s[puy]|st[^or]|ta|textL|vi|xC|y|z)/;\nfunction createFactory(tag) {\n return createElement.bind(null, tag);\n}\nfunction Fragment(attr) {\n const fragment = document.createDocumentFragment();\n appendChild(attr.children, fragment);\n return fragment;\n}\nclass Component {\n static isComponent = true;\n constructor(props) {\n this.props = props;\n }\n render() {\n return null;\n }\n}\nfunction initComponentClass(Class, attr, children) {\n attr = {\n ...attr,\n children,\n };\n const instance = new Class(attr);\n const node = instance.render();\n if (\"ref\" in attr) {\n attachRef(attr.ref, instance);\n }\n return node;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nfunction jsx(tag, _ref) {\n let { children, ...attr } = _ref;\n if (!attr.namespaceURI && svg[tag] === 0) {\n attr = {\n ...attr,\n namespaceURI: SVGNamespace,\n };\n }\n let node;\n if (isString(tag)) {\n node = attr.namespaceURI\n ? document.createElementNS(attr.namespaceURI, tag)\n : document.createElement(tag);\n attributes(attr, node);\n appendChild(children, node);\n\n // Select `option` elements in `select`\n if (node instanceof window.HTMLSelectElement && attr.value != null) {\n if (attr.multiple === true && Array.isArray(attr.value)) {\n const values = attr.value.map((value) => String(value));\n node\n .querySelectorAll(\"option\")\n .forEach(\n (option) => (option.selected = values.includes(option.value)),\n );\n } else {\n node.value = attr.value;\n }\n }\n attachRef(attr.ref, node);\n } else if (isFunction(tag)) {\n // Custom elements.\n if (isObject(tag.defaultProps)) {\n attr = {\n ...tag.defaultProps,\n ...attr,\n };\n }\n node = isComponentClass(tag)\n ? initComponentClass(tag, attr, children)\n : tag({\n ...attr,\n children,\n });\n } else {\n throw new TypeError(`Invalid JSX element type: ${tag}`);\n }\n return node;\n}\nfunction createElement(tag, attr) {\n for (\n var _len = arguments.length,\n children = new Array(_len > 2 ? _len - 2 : 0),\n _key2 = 2;\n _key2 < _len;\n _key2++\n ) {\n children[_key2 - 2] = arguments[_key2];\n }\n if (isString(attr) || Array.isArray(attr)) {\n children.unshift(attr);\n attr = {};\n }\n attr = attr || {};\n if (attr.children != null && !children.length) {\n ({ children, ...attr } = attr);\n }\n return jsx(\n tag,\n {\n ...attr,\n children,\n },\n attr.key,\n );\n}\nfunction attachRef(ref, node) {\n if (isRef(ref)) {\n ref.current = node;\n } else if (isFunction(ref)) {\n ref(node);\n }\n}\nfunction appendChild(child, node) {\n if (isArrayLike(child)) {\n appendChildren(child, node);\n } else if (isString(child) || isNumber(child)) {\n appendChildToNode(document.createTextNode(child), node);\n } else if (child === null) {\n appendChildToNode(document.createComment(\"\"), node);\n } else if (isElement(child)) {\n appendChildToNode(child, node);\n } else if (isShadowRoot(child)) {\n const shadowRoot = node.attachShadow(child.attr);\n appendChild(child.children, shadowRoot);\n attachRef(child.ref, shadowRoot);\n }\n}\nfunction appendChildren(children, node) {\n for (const child of [...children]) {\n appendChild(child, node);\n }\n return node;\n}\nfunction appendChildToNode(child, node) {\n if (node instanceof window.HTMLTemplateElement) {\n node.content.appendChild(child);\n } else {\n node.appendChild(child);\n }\n}\nfunction normalizeAttribute(s, separator) {\n return s.replace(/[A-Z]/g, (match) => separator + match.toLowerCase());\n}\nfunction style(node, value) {\n if (value == null || value === false);\n else if (Array.isArray(value)) {\n value.forEach((v) => style(node, v));\n } else if (isString(value)) {\n node.setAttribute(\"style\", value);\n } else if (isObject(value)) {\n forEach(value, (val, key) => {\n if (key.indexOf(\"-\") === 0) {\n // CSS custom properties (variables) start with `-` (e.g. `--my-variable`)\n // and must be assigned via `setProperty`.\n node.style.setProperty(key, val);\n } else if (isNumber(val) && isUnitlessNumber[key] !== 0) {\n node.style[key] = val + \"px\";\n } else {\n node.style[key] = val;\n }\n });\n }\n}\nfunction attribute(key, value, node) {\n switch (key) {\n case \"xlinkActuate\":\n case \"xlinkArcrole\":\n case \"xlinkHref\":\n case \"xlinkRole\":\n case \"xlinkShow\":\n case \"xlinkTitle\":\n case \"xlinkType\":\n attrNS(node, XLinkNamespace, normalizeAttribute(key, \":\"), value);\n return;\n case \"xmlnsXlink\":\n attr(node, normalizeAttribute(key, \":\"), value);\n return;\n case \"xmlBase\":\n case \"xmlLang\":\n case \"xmlSpace\":\n attrNS(node, XMLNamespace, normalizeAttribute(key, \":\"), value);\n return;\n }\n switch (key) {\n case \"htmlFor\":\n attr(node, \"for\", value);\n return;\n case \"dataset\":\n forEach(value, (dataValue, dataKey) => {\n if (dataValue != null) {\n node.dataset[dataKey] = dataValue;\n }\n });\n return;\n case \"innerHTML\":\n case \"innerText\":\n case \"textContent\":\n if (isVisibleChild(value)) {\n node[key] = value;\n }\n return;\n case \"dangerouslySetInnerHTML\":\n if (isObject(value)) {\n node.innerHTML = value[\"__html\"];\n }\n return;\n case \"value\":\n if (value == null || node instanceof window.HTMLSelectElement) {\n // skip nullish values\n // for `<select>` apply value after appending `<option>` elements\n return;\n } else if (node instanceof window.HTMLTextAreaElement) {\n node.value = value;\n return;\n }\n // use attribute for other elements\n break;\n case \"spellCheck\":\n node.spellcheck = value;\n return;\n case \"class\":\n case \"className\":\n if (isFunction(value)) {\n value(node);\n } else {\n attr(node, \"class\", className(value));\n }\n return;\n case \"ref\":\n case \"namespaceURI\":\n return;\n case \"style\":\n style(node, value);\n return;\n case \"on\":\n case \"onCapture\":\n forEach(value, (eventHandler, eventName) => {\n node.addEventListener(eventName, eventHandler, key === \"onCapture\");\n });\n return;\n // fallthrough\n }\n if (isFunction(value)) {\n if (key[0] === \"o\" && key[1] === \"n\") {\n let attribute = key.toLowerCase();\n const useCapture = attribute.endsWith(\"capture\");\n if (attribute === \"ondoubleclick\") {\n attribute = \"ondblclick\";\n } else if (useCapture && attribute === \"ondoubleclickcapture\") {\n attribute = \"ondblclickcapture\";\n }\n if (!useCapture && node[attribute] === null) {\n // use property when possible PR #17\n node[attribute] = value;\n } else if (useCapture) {\n node.addEventListener(\n attribute.substring(2, attribute.length - 7),\n value,\n true,\n );\n } else {\n let eventName;\n if (attribute in window) {\n // standard event\n // the JSX attribute could have been \"onMouseOver\" and the\n // member name \"onmouseover\" is on the window's prototype\n // so let's add the listener \"mouseover\", which is all lowercased\n const standardEventName = attribute.substring(2);\n eventName = standardEventName;\n } else {\n // custom event\n // the JSX attribute could have been \"onMyCustomEvent\"\n // so let's trim off the \"on\" prefix and lowercase the first character\n // and add the listener \"myCustomEvent\"\n // except for the first character, we keep the event name case\n const customEventName = attribute[2] + key.slice(3);\n eventName = customEventName;\n }\n node.addEventListener(eventName, value);\n }\n }\n } else if (isObject(value)) {\n node[key] = value;\n } else if (value === true) {\n attr(node, key, \"\");\n } else if (value !== false && value != null) {\n if (node instanceof SVGElement && !nonPresentationSVGAttributes.test(key)) {\n attr(node, normalizeAttribute(key, \"-\"), value);\n } else {\n attr(node, key, value);\n }\n }\n}\nfunction attr(node, key, value) {\n node.setAttribute(key, value);\n}\nfunction attrNS(node, namespace, key, value) {\n node.setAttributeNS(namespace, key, value);\n}\nfunction attributes(attr, node) {\n for (const key of keys(attr)) {\n attribute(key, attr[key], node);\n }\n return node;\n}\n\nfunction useText(initialValue) {\n const text = new Text();\n Object.defineProperty(text, \"toString\", {\n value() {\n return this.textContent;\n },\n });\n function setText(value) {\n text.textContent = value;\n }\n if (initialValue != null) {\n setText(initialValue);\n }\n return [text, setText];\n}\nfunction useClassList(initialValue) {\n const div = document.createElement(\"div\");\n if (initialValue != null) {\n div.className = className(initialValue);\n }\n let list = div.classList;\n function ClassList(value) {\n value.setAttribute(\"class\", list.value);\n list = value.classList;\n }\n Object.defineProperties(\n ClassList,\n Object.getOwnPropertyDescriptors({\n get size() {\n return list.length;\n },\n get value() {\n return list.value;\n },\n add() {\n list.add(...arguments);\n },\n remove() {\n list.remove(...arguments);\n },\n toggle(token, force) {\n list.toggle(token, force);\n },\n contains(token) {\n return list.contains(token);\n },\n }),\n );\n return ClassList;\n}\n\nfunction useMemo(factory) {\n return factory();\n}\nfunction forwardRef(render) {\n return (_ref) => {\n let { ref, ...props } = _ref;\n return render(props, ref ?? createRef());\n };\n}\nfunction useImperativeHandle(ref, init) {\n attachRef(ref, init());\n}\n\nconst cache = /* @__PURE__ */ new Map();\nconst createStyledComponent = (name) =>\n function (list) {\n for (\n var _len = arguments.length,\n interpolations = new Array(_len > 1 ? _len - 1 : 0),\n _key = 1;\n _key < _len;\n _key++\n ) {\n interpolations[_key - 1] = arguments[_key];\n }\n return (_ref) => {\n let { style, ...props } = _ref;\n const lastIndex = list.length - 1;\n const css =\n list.slice(0, lastIndex).reduce((p, s, i) => {\n const interpolation = interpolations[i];\n const current =\n typeof interpolation === \"function\"\n ? interpolation(props)\n : interpolation;\n return p + s + current;\n }, \"\") + list[lastIndex];\n return createElement(name, {\n style: [css, style],\n ...props,\n });\n };\n };\nconst baseStyled = (customComponent) => createStyledComponent(customComponent);\nconst styled = /* @__PURE__ */ new Proxy(baseStyled, {\n get(_, name) {\n return setIfAbsent(cache, name, () => createStyledComponent(name));\n },\n});\nfunction setIfAbsent(map, key, getValue) {\n if (map.has(key)) {\n return map.get(key);\n } else {\n const value = getValue(key);\n map.set(key, value);\n return value;\n }\n}\n\nvar index = {\n Component,\n PureComponent: Component,\n createElement,\n Fragment,\n ShadowRoot,\n};\nfunction preventDefault(event) {\n event.preventDefault();\n return event;\n}\nfunction stopPropagation(event) {\n event.stopPropagation();\n return event;\n}\n\nexport {\n Component,\n Fragment,\n Component as PureComponent,\n SVGNamespace,\n ShadowRoot,\n Fragment as StrictMode,\n className,\n createElement,\n createFactory,\n createRef,\n index as default,\n forwardRef,\n createElement as h,\n isRef,\n jsx,\n jsx as jsxs,\n identity as memo,\n preventDefault,\n stopPropagation,\n styled,\n identity as useCallback,\n useClassList,\n useImperativeHandle,\n useMemo,\n createRef as useRef,\n useText,\n};\n","import { JSX } from 'vue/jsx-runtime'\nimport styles from './styles.module.sass'\n\nexport const ProgressBar = (\n attrs: JSX.IntrinsicElements['div'] & { indeterminate?: boolean; progress?: number }\n) => {\n const indeterminate = attrs.indeterminate ?? true\n const bar = (\n <div\n class={`${styles.ipe_progress}`}\n data-indeterminate={`${indeterminate}`}\n // @ts-ignore\n style={{ width: '100%', '--progress': attrs.progress ? `${attrs.progress}%` : '0%' }}\n {...attrs}\n ></div>\n ) as HTMLElement & { setProgress: (progress: number) => void }\n bar.setProgress = (progress: number | undefined) => {\n if (typeof progress === 'number') {\n bar.dataset.indeterminate = 'false'\n bar.style.setProperty('--progress', `${progress}%`)\n } else {\n bar.dataset.indeterminate = 'true'\n bar.style.setProperty('--progress', '0%')\n }\n }\n return bar\n}\n","export const promiseWithResolvers = <T extends unknown = any>() => {\n let resolve!: (value: T | PromiseLike<T>) => void\n let reject!: (reason?: any) => void\n const promise = new Promise<T>((res, rej) => {\n resolve = res\n reject = rej\n })\n return { promise, resolve, reject }\n}\n"],"names":["keys","isBoolean","val","isElement","isString","isNumber","isObject","isFunction","isComponentClass","Component","isArrayLike","obj","forEach","value","fn","key","isRef","maybeRef","isUnitlessNumber","prefixKey","prefix","prefixes","prop","jsxDomType","JsxDomType","isShadowRoot","el","SVGNamespace","XLinkNamespace","XMLNamespace","isVisibleChild","className","k","svg","nonPresentationSVGAttributes","Fragment","attr","fragment","appendChild","initComponentClass","Class","children","instance","node","attachRef","jsx","tag","_ref","attributes","values","option","createElement","_len","_key2","ref","child","appendChildren","appendChildToNode","shadowRoot","normalizeAttribute","s","separator","match","style","v","attribute","attrNS","dataValue","dataKey","eventHandler","eventName","useCapture","namespace","ProgressBar","attrs","indeterminate","bar","styles","progress","promiseWithResolvers","resolve","reject","res","rej"],"mappings":"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","x_google_ignoreList":[0]}
@@ -1,4 +1,4 @@
1
- import { j as e } from "./index-CM_6yF2v.js";
1
+ import { j as e } from "./Promise.withResolvers-C4chhLB1.js";
2
2
  const d = (a) => {
3
3
  const { id: o, name: s, value: i, label: r, inputProps: l, labelProps: p, children: n, ...t } = a;
4
4
  return /* @__PURE__ */ e("label", { className: "theme-ipe ipe-radio-box", ...t, children: [
@@ -10,4 +10,4 @@ const d = (a) => {
10
10
  export {
11
11
  d as R
12
12
  };
13
- //# sourceMappingURL=RadioBox-0UuxlcWZ.js.map
13
+ //# sourceMappingURL=RadioBox-B0z9YHQg.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RadioBox-0UuxlcWZ.js","sources":["../src/components/RadioBox.tsx"],"sourcesContent":["import { JSX } from 'jsx-dom'\n\nexport type RadioBoxProps = {\n id?: string\n name: string\n value: string\n label?: string | HTMLElement\n inputProps?: JSX.IntrinsicElements['input']\n labelProps?: JSX.IntrinsicElements['span']\n} & JSX.IntrinsicElements['label']\n\nexport const RadioBox = (props: RadioBoxProps) => {\n const { id, name, value, label, inputProps, labelProps, children, ...rest } = props\n return (\n <label className=\"theme-ipe ipe-radio-box\" {...rest}>\n <input type=\"radio\" id={id} name={name} value={value} {...inputProps} />\n <span className=\"ipe-checkbox-box\"></span>\n <span {...labelProps}>{label || children}</span>\n </label>\n )\n}\n"],"names":["RadioBox","props","id","name","value","label","inputProps","labelProps","children","rest","jsxs","jsx"],"mappings":";AAWO,MAAMA,IAAW,CAACC,MAAyB;AAChD,QAAM,EAAE,IAAAC,GAAI,MAAAC,GAAM,OAAAC,GAAO,OAAAC,GAAO,YAAAC,GAAY,YAAAC,GAAY,UAAAC,GAAU,GAAGC,EAAA,IAASR;AAC9E,SACES,gBAAAA,EAAC,SAAA,EAAM,WAAU,2BAA2B,GAAGD,GAC7C,UAAA;AAAA,IAAA,gBAAAE,EAAC,WAAM,MAAK,SAAQ,IAAAT,GAAQ,MAAAC,GAAY,OAAAC,GAAe,GAAGE,GAAY;AAAA,IACtE,gBAAAK,EAAC,QAAA,EAAK,WAAU,mBAAA,CAAmB;AAAA,IACnC,gBAAAA,EAAC,QAAA,EAAM,GAAGJ,GAAa,eAASC,EAAA,CAAS;AAAA,EAAA,GAC3C;AAEJ;"}
1
+ {"version":3,"file":"RadioBox-B0z9YHQg.js","sources":["../src/components/RadioBox.tsx"],"sourcesContent":["import { JSX } from 'jsx-dom'\n\nexport type RadioBoxProps = {\n id?: string\n name: string\n value: string\n label?: string | HTMLElement\n inputProps?: JSX.IntrinsicElements['input']\n labelProps?: JSX.IntrinsicElements['span']\n} & JSX.IntrinsicElements['label']\n\nexport const RadioBox = (props: RadioBoxProps) => {\n const { id, name, value, label, inputProps, labelProps, children, ...rest } = props\n return (\n <label className=\"theme-ipe ipe-radio-box\" {...rest}>\n <input type=\"radio\" id={id} name={name} value={value} {...inputProps} />\n <span className=\"ipe-checkbox-box\"></span>\n <span {...labelProps}>{label || children}</span>\n </label>\n )\n}\n"],"names":["RadioBox","props","id","name","value","label","inputProps","labelProps","children","rest","jsxs","jsx"],"mappings":";AAWO,MAAMA,IAAW,CAACC,MAAyB;AAChD,QAAM,EAAE,IAAAC,GAAI,MAAAC,GAAM,OAAAC,GAAO,OAAAC,GAAO,YAAAC,GAAY,YAAAC,GAAY,UAAAC,GAAU,GAAGC,EAAA,IAASR;AAC9E,SACES,gBAAAA,EAAC,SAAA,EAAM,WAAU,2BAA2B,GAAGD,GAC7C,UAAA;AAAA,IAAA,gBAAAE,EAAC,WAAM,MAAK,SAAQ,IAAAT,GAAQ,MAAAC,GAAY,OAAAC,GAAe,GAAGE,GAAY;AAAA,IACtE,gBAAAK,EAAC,QAAA,EAAK,WAAU,mBAAA,CAAmB;AAAA,IACnC,gBAAAA,EAAC,QAAA,EAAM,GAAGJ,GAAa,eAASC,EAAA,CAAS;AAAA,EAAA,GAC3C;AAEJ;"}
@@ -1,58 +1,61 @@
1
- import { M as y } from "../index-CG38LlAh.js";
2
- import { j as n } from "../index-CM_6yF2v.js";
3
- import { P as V } from "../index-CM_6yF2v.js";
4
- import { T as A } from "../index-DD5CVCfD.js";
5
- import { A as B } from "../ActionButton-CRjo_l3y.js";
6
- import { C as T, I as z } from "../InputBox-CZ1v4_l3.js";
7
- import { R as C } from "../RadioBox-0UuxlcWZ.js";
8
- const r = "_tabview_zlbug_1", _ = "_labels_container_zlbug_4", b = "_label_zlbug_4", d = "_active_zlbug_32", m = "_contents_container_zlbug_35", i = {
1
+ import { I as y, M as V } from "../IconQuickEdit-BiRYADU_.js";
2
+ import { j as e } from "../Promise.withResolvers-C4chhLB1.js";
3
+ import { P as k } from "../Promise.withResolvers-C4chhLB1.js";
4
+ import { T as L } from "../index-z_qDGCMT.js";
5
+ import { A } from "../ActionButton-B6OUgtHx.js";
6
+ import { C as M } from "../CheckBox-Dx3r3LQz.js";
7
+ import { I as T } from "../InputBox-D2ZRTMFP.js";
8
+ import { R as C } from "../RadioBox-B0z9YHQg.js";
9
+ import { I as j } from "../IconQuickDiff-BkbxyY-d.js";
10
+ import { I as H } from "../IconUpload-Bz4BW_nc.js";
11
+ const r = "_tabview_zlbug_1", d = "_labels_container_zlbug_4", b = "_label_zlbug_4", _ = "_active_zlbug_32", f = "_contents_container_zlbug_35", i = {
9
12
  tabview: r,
10
- labels_container: _,
13
+ labels_container: d,
11
14
  label: b,
12
- active: d,
13
- contents_container: m
15
+ active: _,
16
+ contents_container: f
14
17
  };
15
- function h({
18
+ function u({
16
19
  tabs: t = [],
17
- defaultActiveIndex: l = 0
20
+ defaultActiveIndex: s = 0
18
21
  }) {
19
- const c = /* @__PURE__ */ n("div", { className: `ipe-tabView ${i.tabview}`, children: [
20
- /* @__PURE__ */ n("ul", { className: `ipe-tabView__labels-container ${i.labels_container}`, children: t.map((a) => /* @__PURE__ */ n(f, { name: a.name, children: a.children }, a.name)) }),
21
- /* @__PURE__ */ n("div", { className: `ipe-tabView__contents ${i.contents_container}`, children: t.map((a) => /* @__PURE__ */ n(p, { name: a.name, children: a.content }, a.name)) })
22
- ] }), s = c.querySelector(
23
- `.ipe-tabView__labels-container > .ipe-tabView__label:nth-child(${l + 1})`
22
+ const l = /* @__PURE__ */ e("div", { className: `ipe-tabView ${i.tabview}`, children: [
23
+ /* @__PURE__ */ e("ul", { className: `ipe-tabView__labels-container ${i.labels_container}`, children: t.map((n) => /* @__PURE__ */ e(p, { name: n.name, children: n.children }, n.name)) }),
24
+ /* @__PURE__ */ e("div", { className: `ipe-tabView__contents ${i.contents_container}`, children: t.map((n) => /* @__PURE__ */ e(m, { name: n.name, children: n.content }, n.name)) })
25
+ ] }), o = l.querySelector(
26
+ `.ipe-tabView__labels-container > .ipe-tabView__label:nth-child(${s + 1})`
24
27
  );
25
- return s && s.click(), c;
28
+ return o && o.click(), l;
26
29
  }
27
- function f({ name: t, children: l }) {
28
- return /* @__PURE__ */ n(
30
+ function p({ name: t, children: s }) {
31
+ return /* @__PURE__ */ e(
29
32
  "li",
30
33
  {
31
34
  "data-tab-name": t,
32
35
  className: `ipe-tabView__label ${i.label}`,
33
- onClick: function(c) {
34
- c.preventDefault();
35
- const s = this.closest(".ipe-tabView");
36
- if (!s) return;
37
- const a = Array.from(s.children).find(
38
- (e) => e.classList.contains("ipe-tabView__labels")
36
+ onClick: function(l) {
37
+ l.preventDefault();
38
+ const o = this.closest(".ipe-tabView");
39
+ if (!o) return;
40
+ const n = Array.from(o.children).find(
41
+ (a) => a.classList.contains("ipe-tabView__labels")
39
42
  )?.children;
40
- a && Array.from(a).forEach((e) => {
41
- e.classList.remove(i.active);
43
+ n && Array.from(n).forEach((a) => {
44
+ a.classList.remove(i.active);
42
45
  }), this.classList.add(i.active);
43
- const o = Array.from(s.children).find(
44
- (e) => e.classList.contains("ipe-tabView__contents")
46
+ const c = Array.from(o.children).find(
47
+ (a) => a.classList.contains("ipe-tabView__contents")
45
48
  )?.children;
46
- o && Array.from(o).forEach((e) => {
47
- e instanceof HTMLElement && (e.dataset.tabName === t ? (e.style.display = "", e.classList.add(i.active)) : (e.style.display = "none", e.classList.remove(i.active)));
49
+ c && Array.from(c).forEach((a) => {
50
+ a instanceof HTMLElement && (a.dataset.tabName === t ? (a.style.display = "", a.classList.add(i.active)) : (a.style.display = "none", a.classList.remove(i.active)));
48
51
  });
49
52
  },
50
- children: /* @__PURE__ */ n("a", { children: l || t })
53
+ children: /* @__PURE__ */ e("a", { children: s || t })
51
54
  }
52
55
  );
53
56
  }
54
- function p({ name: t, children: l }) {
55
- return /* @__PURE__ */ n(
57
+ function m({ name: t, children: s }) {
58
+ return /* @__PURE__ */ e(
56
59
  "div",
57
60
  {
58
61
  "data-tab-name": t,
@@ -60,20 +63,46 @@ function p({ name: t, children: l }) {
60
63
  style: {
61
64
  display: "none"
62
65
  },
63
- children: l
66
+ children: s
64
67
  }
65
68
  );
66
69
  }
70
+ const v = (t) => /* @__PURE__ */ e(
71
+ "svg",
72
+ {
73
+ xmlns: "http://www.w3.org/2000/svg",
74
+ width: "24",
75
+ height: "24",
76
+ viewBox: "0 0 24 24",
77
+ fill: "none",
78
+ stroke: "currentColor",
79
+ "stroke-width": "2",
80
+ "stroke-linecap": "round",
81
+ "stroke-linejoin": "round",
82
+ ...t,
83
+ class: `icon icon-tabler icons-tabler-outline icon-tabler-edit ${t.className || ""}`,
84
+ children: [
85
+ /* @__PURE__ */ e("path", { stroke: "none", d: "M0 0h24v24H0z", fill: "none" }),
86
+ /* @__PURE__ */ e("path", { d: "M7 7h-1a2 2 0 0 0 -2 2v9a2 2 0 0 0 2 2h9a2 2 0 0 0 2 -2v-1" }),
87
+ /* @__PURE__ */ e("path", { d: "M20.385 6.585a2.1 2.1 0 0 0 -2.97 -2.97l-8.415 8.385v3h3l8.385 -8.415z" }),
88
+ /* @__PURE__ */ e("path", { d: "M16 5l3 3" })
89
+ ]
90
+ }
91
+ );
67
92
  export {
68
- B as ActionButton,
69
- T as CheckBox,
70
- z as InputBox,
71
- y as MBox,
72
- V as ProgressBar,
93
+ A as ActionButton,
94
+ M as CheckBox,
95
+ v as IconEdit,
96
+ j as IconQuickDiff,
97
+ y as IconQuickEdit,
98
+ H as IconUpload,
99
+ T as InputBox,
100
+ V as MBox,
101
+ k as ProgressBar,
73
102
  C as RadioBox,
74
- p as TabContent,
75
- f as TabLabel,
76
- h as TabView,
77
- A as TwinSwapInput
103
+ m as TabContent,
104
+ p as TabLabel,
105
+ u as TabView,
106
+ L as TwinSwapInput
78
107
  };
79
108
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/components/TabView/index.tsx"],"sourcesContent":["import { ReactNode } from 'jsx-dom'\nimport styles from './styles.module.sass'\n\nexport interface TabViewLabelOptions {\n name: string\n children: ReactNode\n}\n\nconsole.log(styles)\n\nexport function TabView({\n tabs = [],\n defaultActiveIndex = 0,\n}: {\n tabs: (TabViewLabelOptions & { content: ReactNode })[]\n defaultActiveIndex?: number\n}) {\n const el = (\n <div className={`ipe-tabView ${styles.tabview}`}>\n <ul className={`ipe-tabView__labels-container ${styles.labels_container}`}>\n {tabs.map((tab) => (\n <TabLabel key={tab.name} name={tab.name}>\n {tab.children}\n </TabLabel>\n ))}\n </ul>\n <div className={`ipe-tabView__contents ${styles.contents_container}`}>\n {tabs.map((tab) => (\n <TabContent key={tab.name} name={tab.name}>\n {tab.content}\n </TabContent>\n ))}\n </div>\n </div>\n )\n\n const defaultActiveLabel = el.querySelector<HTMLAnchorElement>(\n `.ipe-tabView__labels-container > .ipe-tabView__label:nth-child(${defaultActiveIndex + 1})`\n )\n if (defaultActiveLabel) {\n defaultActiveLabel.click()\n }\n\n return el\n}\n\nexport function TabLabel({ name, children }: { name: string; children: ReactNode }) {\n return (\n <li\n data-tab-name={name}\n className={`ipe-tabView__label ${styles.label}`}\n onClick={function (e) {\n e.preventDefault()\n const container = this.closest('.ipe-tabView')\n if (!container) return\n const labels = Array.from(container.children).find((el) =>\n el.classList.contains('ipe-tabView__labels')\n )?.children\n if (labels) {\n Array.from(labels).forEach((label) => {\n label.classList.remove(styles.active)\n })\n }\n this.classList.add(styles.active)\n const contents = Array.from(container.children).find((el) =>\n el.classList.contains('ipe-tabView__contents')\n )?.children\n if (contents) {\n Array.from(contents).forEach((content) => {\n if (content instanceof HTMLElement) {\n if (content.dataset.tabName === name) {\n content.style.display = ''\n content.classList.add(styles.active)\n } else {\n content.style.display = 'none'\n content.classList.remove(styles.active)\n }\n }\n })\n }\n }}\n >\n <a>{children || name}</a>\n </li>\n )\n}\n\nexport function TabContent({ name, children }: { name: string; children: ReactNode }) {\n return (\n <div\n data-tab-name={name}\n className=\"ipe-tabView__content-body\"\n style={{\n display: 'none',\n }}\n >\n {children}\n </div>\n )\n}\n"],"names":["TabView","tabs","defaultActiveIndex","el","jsxs","styles","jsx","tab","TabLabel","TabContent","defaultActiveLabel","name","children","e","container","labels","label","contents","content"],"mappings":";;;;;;;;;;;;;;AAUO,SAASA,EAAQ;AAAA,EACtB,MAAAC,IAAO,CAAA;AAAA,EACP,oBAAAC,IAAqB;AACvB,GAGG;AACD,QAAMC,IACJC,gBAAAA,EAAC,OAAA,EAAI,WAAW,eAAeC,EAAO,OAAO,IAC3C,UAAA;AAAA,IAAA,gBAAAC,EAAC,MAAA,EAAG,WAAW,iCAAiCD,EAAO,gBAAgB,IACpE,UAAAJ,EAAK,IAAI,CAACM,wBACRC,GAAA,EAAwB,MAAMD,EAAI,MAChC,UAAAA,EAAI,YADQA,EAAI,IAEnB,CACD,EAAA,CACH;AAAA,IACA,gBAAAD,EAAC,SAAI,WAAW,yBAAyBD,EAAO,kBAAkB,IAC/D,YAAK,IAAI,CAACE,MACT,gBAAAD,EAACG,GAAA,EAA0B,MAAMF,EAAI,MAClC,YAAI,QAAA,GADUA,EAAI,IAErB,CACD,EAAA,CACH;AAAA,EAAA,GACF,GAGIG,IAAqBP,EAAG;AAAA,IAC5B,kEAAkED,IAAqB,CAAC;AAAA,EAAA;AAE1F,SAAIQ,KACFA,EAAmB,MAAA,GAGdP;AACT;AAEO,SAASK,EAAS,EAAE,MAAAG,GAAM,UAAAC,KAAmD;AAClF,SACE,gBAAAN;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,iBAAeK;AAAA,MACf,WAAW,sBAAsBN,EAAO,KAAK;AAAA,MAC7C,SAAS,SAAUQ,GAAG;AACpB,QAAAA,EAAE,eAAA;AACF,cAAMC,IAAY,KAAK,QAAQ,cAAc;AAC7C,YAAI,CAACA,EAAW;AAChB,cAAMC,IAAS,MAAM,KAAKD,EAAU,QAAQ,EAAE;AAAA,UAAK,CAACX,MAClDA,EAAG,UAAU,SAAS,qBAAqB;AAAA,QAAA,GAC1C;AACH,QAAIY,KACF,MAAM,KAAKA,CAAM,EAAE,QAAQ,CAACC,MAAU;AACpC,UAAAA,EAAM,UAAU,OAAOX,EAAO,MAAM;AAAA,QACtC,CAAC,GAEH,KAAK,UAAU,IAAIA,EAAO,MAAM;AAChC,cAAMY,IAAW,MAAM,KAAKH,EAAU,QAAQ,EAAE;AAAA,UAAK,CAACX,MACpDA,EAAG,UAAU,SAAS,uBAAuB;AAAA,QAAA,GAC5C;AACH,QAAIc,KACF,MAAM,KAAKA,CAAQ,EAAE,QAAQ,CAACC,MAAY;AACxC,UAAIA,aAAmB,gBACjBA,EAAQ,QAAQ,YAAYP,KAC9BO,EAAQ,MAAM,UAAU,IACxBA,EAAQ,UAAU,IAAIb,EAAO,MAAM,MAEnCa,EAAQ,MAAM,UAAU,QACxBA,EAAQ,UAAU,OAAOb,EAAO,MAAM;AAAA,QAG5C,CAAC;AAAA,MAEL;AAAA,MAEA,UAAA,gBAAAC,EAAC,KAAA,EAAG,UAAAM,KAAYD,EAAA,CAAK;AAAA,IAAA;AAAA,EAAA;AAG3B;AAEO,SAASF,EAAW,EAAE,MAAAE,GAAM,UAAAC,KAAmD;AACpF,SACE,gBAAAN;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,iBAAeK;AAAA,MACf,WAAU;AAAA,MACV,OAAO;AAAA,QACL,SAAS;AAAA,MAAA;AAAA,MAGV,UAAAC;AAAA,IAAA;AAAA,EAAA;AAGP;"}
1
+ {"version":3,"file":"index.js","sources":["../../src/components/TabView/index.tsx","../../src/components/Icon/IconEdit.tsx"],"sourcesContent":["import { ReactNode } from 'jsx-dom'\nimport styles from './styles.module.sass'\n\nexport interface TabViewLabelOptions {\n name: string\n children: ReactNode\n}\n\nconsole.log(styles)\n\nexport function TabView({\n tabs = [],\n defaultActiveIndex = 0,\n}: {\n tabs: (TabViewLabelOptions & { content: ReactNode })[]\n defaultActiveIndex?: number\n}) {\n const el = (\n <div className={`ipe-tabView ${styles.tabview}`}>\n <ul className={`ipe-tabView__labels-container ${styles.labels_container}`}>\n {tabs.map((tab) => (\n <TabLabel key={tab.name} name={tab.name}>\n {tab.children}\n </TabLabel>\n ))}\n </ul>\n <div className={`ipe-tabView__contents ${styles.contents_container}`}>\n {tabs.map((tab) => (\n <TabContent key={tab.name} name={tab.name}>\n {tab.content}\n </TabContent>\n ))}\n </div>\n </div>\n )\n\n const defaultActiveLabel = el.querySelector<HTMLAnchorElement>(\n `.ipe-tabView__labels-container > .ipe-tabView__label:nth-child(${defaultActiveIndex + 1})`\n )\n if (defaultActiveLabel) {\n defaultActiveLabel.click()\n }\n\n return el\n}\n\nexport function TabLabel({ name, children }: { name: string; children: ReactNode }) {\n return (\n <li\n data-tab-name={name}\n className={`ipe-tabView__label ${styles.label}`}\n onClick={function (e) {\n e.preventDefault()\n const container = this.closest('.ipe-tabView')\n if (!container) return\n const labels = Array.from(container.children).find((el) =>\n el.classList.contains('ipe-tabView__labels')\n )?.children\n if (labels) {\n Array.from(labels).forEach((label) => {\n label.classList.remove(styles.active)\n })\n }\n this.classList.add(styles.active)\n const contents = Array.from(container.children).find((el) =>\n el.classList.contains('ipe-tabView__contents')\n )?.children\n if (contents) {\n Array.from(contents).forEach((content) => {\n if (content instanceof HTMLElement) {\n if (content.dataset.tabName === name) {\n content.style.display = ''\n content.classList.add(styles.active)\n } else {\n content.style.display = 'none'\n content.classList.remove(styles.active)\n }\n }\n })\n }\n }}\n >\n <a>{children || name}</a>\n </li>\n )\n}\n\nexport function TabContent({ name, children }: { name: string; children: ReactNode }) {\n return (\n <div\n data-tab-name={name}\n className=\"ipe-tabView__content-body\"\n style={{\n display: 'none',\n }}\n >\n {children}\n </div>\n )\n}\n","import { SVGProps } from 'jsx-dom'\n\nexport const IconEdit = (props: SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n {...props}\n class={`icon icon-tabler icons-tabler-outline icon-tabler-edit ${props.className || ''}`}\n >\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\n <path d=\"M7 7h-1a2 2 0 0 0 -2 2v9a2 2 0 0 0 2 2h9a2 2 0 0 0 2 -2v-1\" />\n <path d=\"M20.385 6.585a2.1 2.1 0 0 0 -2.97 -2.97l-8.415 8.385v3h3l8.385 -8.415z\" />\n <path d=\"M16 5l3 3\" />\n </svg>\n)\n"],"names":["TabView","tabs","defaultActiveIndex","el","jsxs","styles","jsx","tab","TabLabel","TabContent","defaultActiveLabel","name","children","e","container","labels","label","contents","content","IconEdit","props"],"mappings":"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"}