admins-components 9.0.82 → 9.0.84
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admins-components170.js.map +1 -1
- package/dist/admins-components173.js +108 -82
- package/dist/admins-components173.js.map +1 -1
- package/dist/admins-components38.js +27 -24
- package/dist/admins-components38.js.map +1 -1
- package/dist/admins-components40.js.map +1 -1
- package/dist/admins-components51.js +78 -83
- package/dist/admins-components51.js.map +1 -1
- package/dist/admins-components52.js.map +1 -1
- package/dist/admins-components68.js +12 -9
- package/dist/admins-components68.js.map +1 -1
- package/dist/admins-components70.js.map +1 -1
- package/dist/admins-components71.js +38 -53
- package/dist/admins-components71.js.map +1 -1
- package/dist/admins-components73.js.map +1 -1
- package/dist/src/components/Modal.vue.d.ts +2 -0
- package/dist/src/vueformelements/config/ArticlePickerElementConfig.d.ts +1 -0
- package/dist/styles/components/data-table/data-cards.scss_vue_type_style_index_0_src_true_lang.css +1 -1
- package/dist/styles/components/modal.scss_vue_type_style_index_0_src_true_lang.css +1 -1
- package/dist/test.html +163 -0
- package/dist/test81.html +161 -0
- package/dist/vueformelements/ArticlePickerElement.vue_vue_type_style_index_0_scoped_56a4bfd6_lang.css +1 -0
- package/dist/widget/dist/hvg-search-image-style.css +1 -0
- package/dist/widget/dist/hvg-search-image.es.js +204437 -0
- package/dist/widget/dist/hvg-search-image.umd.js +506 -0
- package/dist/widget/dist/search-posts-widget.css +2 -1
- package/dist/widget/dist/search-posts-widget.es.js +9959 -11185
- package/dist/widget/dist/search-posts-widget.umd.js +5 -31
- package/dist/widget.css +1 -1
- package/package.json +1 -1
- package/dist/vueformelements/ArticlePickerElement.vue_vue_type_style_index_0_scoped_54217a66_lang.css +0 -1
|
@@ -9,14 +9,14 @@ import { shortUuid as s } from "./admins-components65.js";
|
|
|
9
9
|
import c from "./admins-components67.js";
|
|
10
10
|
import { Fragment as l, computed as u, createBlock as d, createCommentVNode as f, createElementBlock as p, createElementVNode as m, createVNode as h, defineComponent as g, isVNode as _, nextTick as v, normalizeClass as y, openBlock as b, ref as x, renderList as S, renderSlot as C, resolveDirective as w, resolveDynamicComponent as T, toDisplayString as E, unref as D, vShow as O, watch as k, withDirectives as A, withModifiers as j } from "vue";
|
|
11
11
|
//#region src/components/data-table/DataCards.vue?vue&type=script&setup=true&lang.ts
|
|
12
|
-
var M = ["onClick"
|
|
12
|
+
var M = ["onClick"], N = ["onClick"], P = { class: "c-card__heading" }, F = { class: "c-card__label" }, I = ["innerHTML"], L = ["innerHTML"], R = ["onClick"], z = { class: "c-card__body" }, B = { class: "c-card__field-label" }, V = {
|
|
13
13
|
key: 1,
|
|
14
14
|
class: "c-cards__loading-wrap"
|
|
15
|
-
},
|
|
15
|
+
}, H = {
|
|
16
16
|
key: 2,
|
|
17
17
|
class: "c-cards__backdrop",
|
|
18
18
|
"aria-hidden": "true"
|
|
19
|
-
},
|
|
19
|
+
}, U = /*@__PURE__*/ g({
|
|
20
20
|
__name: "DataCards",
|
|
21
21
|
props: {
|
|
22
22
|
config: {},
|
|
@@ -29,19 +29,19 @@ var M = ["onClick", "onPointerdown"], N = ["onClick"], P = { class: "c-card__hea
|
|
|
29
29
|
},
|
|
30
30
|
emits: ["selection-change"],
|
|
31
31
|
setup(a, { emit: g }) {
|
|
32
|
-
let
|
|
33
|
-
k(() =>
|
|
34
|
-
e && (await v(),
|
|
32
|
+
let U = a, W = g, { selectedKeys: G, toggle: K } = i(() => U.items, () => U.config.selectableAttr, (e) => W("selection-change", e)), q = x(/* @__PURE__ */ new Set()), J = x(null);
|
|
33
|
+
k(() => U.loading, async (e) => {
|
|
34
|
+
e && (await v(), J.value?.scrollTo({
|
|
35
35
|
top: 0,
|
|
36
36
|
behavior: "smooth"
|
|
37
37
|
}));
|
|
38
|
-
}), k(() =>
|
|
39
|
-
|
|
38
|
+
}), k(() => U.items, () => {
|
|
39
|
+
q.value = /* @__PURE__ */ new Set();
|
|
40
40
|
});
|
|
41
|
-
let
|
|
42
|
-
let e =
|
|
41
|
+
let Y = u(() => U.config.columns.filter((e) => e.visible !== !1)), X = u(() => {
|
|
42
|
+
let e = U.settings;
|
|
43
43
|
if (e?.cardHeaderColumns) {
|
|
44
|
-
let t =
|
|
44
|
+
let t = Y.value.filter((t) => e.cardHeaderColumns[t.property]);
|
|
45
45
|
if (t.length > 0) {
|
|
46
46
|
if (e.cardHeaderOrder) {
|
|
47
47
|
let n = e.cardHeaderOrder;
|
|
@@ -53,35 +53,23 @@ var M = ["onClick", "onPointerdown"], N = ["onClick"], P = { class: "c-card__hea
|
|
|
53
53
|
return t;
|
|
54
54
|
}
|
|
55
55
|
}
|
|
56
|
-
let t =
|
|
57
|
-
return t.length > 0 ? t :
|
|
58
|
-
})
|
|
59
|
-
function
|
|
60
|
-
|
|
61
|
-
Z = !0, G(t);
|
|
62
|
-
}, 500));
|
|
63
|
-
}
|
|
64
|
-
function $() {
|
|
65
|
-
X &&= (clearTimeout(X), null);
|
|
66
|
-
}
|
|
67
|
-
function ee(e) {
|
|
68
|
-
Z && e.preventDefault();
|
|
56
|
+
let t = Y.value.filter((e) => e.primary);
|
|
57
|
+
return t.length > 0 ? t : Y.value.slice(0, 1);
|
|
58
|
+
});
|
|
59
|
+
function Z(e, t) {
|
|
60
|
+
U.config.selectableAttr ? K(t) : $(e);
|
|
69
61
|
}
|
|
70
|
-
function
|
|
71
|
-
|
|
72
|
-
Z = !1;
|
|
73
|
-
return;
|
|
74
|
-
}
|
|
75
|
-
ne(e);
|
|
62
|
+
function Q(e, t) {
|
|
63
|
+
t.stopPropagation(), $(e);
|
|
76
64
|
}
|
|
77
|
-
function
|
|
78
|
-
|
|
65
|
+
function $(e) {
|
|
66
|
+
q.value.has(e) ? q.value.delete(e) : q.value.add(e), q.value = new Set(q.value);
|
|
79
67
|
}
|
|
80
68
|
return (i, u) => {
|
|
81
69
|
let g = w("tooltip");
|
|
82
70
|
return b(), p("div", {
|
|
83
71
|
ref_key: "cardsWrapperRef",
|
|
84
|
-
ref:
|
|
72
|
+
ref: J,
|
|
85
73
|
class: y(["ac-component c-cards-wrapper list-card-view", { "is-loading": a.loading }])
|
|
86
74
|
}, [!a.loading || a.items.length > 0 ? (b(), p("div", {
|
|
87
75
|
key: 0,
|
|
@@ -89,28 +77,24 @@ var M = ["onClick", "onPointerdown"], N = ["onClick"], P = { class: "c-card__hea
|
|
|
89
77
|
}, [(b(!0), p(l, null, S(a.items, (t, v) => (b(), p("div", {
|
|
90
78
|
key: v,
|
|
91
79
|
class: y(["c-card", {
|
|
92
|
-
"is-open":
|
|
93
|
-
"is-selected": a.config.selectableAttr && D(
|
|
80
|
+
"is-open": q.value.has(v),
|
|
81
|
+
"is-selected": a.config.selectableAttr && D(G).has(t[a.config.selectableAttr])
|
|
94
82
|
}])
|
|
95
83
|
}, [m("button", {
|
|
96
84
|
type: "button",
|
|
97
85
|
class: "c-card__header",
|
|
98
|
-
onClick: (e) =>
|
|
99
|
-
onPointerdown: (e) => Q(e, t),
|
|
100
|
-
onPointerup: u[1] ||= (e) => $(),
|
|
101
|
-
onPointerleave: u[2] ||= (e) => $(),
|
|
102
|
-
onContextmenu: ee
|
|
86
|
+
onClick: (e) => Z(v, t)
|
|
103
87
|
}, [
|
|
104
88
|
a.config.selectableAttr ? (b(), p("span", {
|
|
105
89
|
key: 0,
|
|
106
90
|
class: "c-card__check-zone",
|
|
107
|
-
onClick: j((e) => D(
|
|
91
|
+
onClick: j((e) => D(K)(t), ["stop"])
|
|
108
92
|
}, [h(e, {
|
|
109
|
-
"model-value": !!D(
|
|
110
|
-
"onUpdate:modelValue": (e) => D(
|
|
93
|
+
"model-value": !!D(G).has(t[a.config.selectableAttr]),
|
|
94
|
+
"onUpdate:modelValue": (e) => D(K)(t),
|
|
111
95
|
onClick: u[0] ||= j(() => {}, ["stop"])
|
|
112
96
|
}, null, 8, ["model-value", "onUpdate:modelValue"])], 8, N)) : f("", !0),
|
|
113
|
-
m("span", P, [(b(!0), p(l, null, S(
|
|
97
|
+
m("span", P, [(b(!0), p(l, null, S(X.value, (e, n) => (b(), p("span", {
|
|
114
98
|
key: e.property,
|
|
115
99
|
class: y(["c-card__heading-item", [{ primary: e.primary }, e.headerClass]])
|
|
116
100
|
}, [m("span", F, E(e.hideHeader ? "" : e.label), 1), m("span", { class: y(["c-card__title", { "c-truncate": a.settings.compact && n === 0 }]) }, [_(D(o)(t, e)) ? (b(), d(T(D(o)(t, e)), { key: 0 })) : e.type === "uuid" ? A((b(), p("span", {
|
|
@@ -120,15 +104,16 @@ var M = ["onClick", "onPointerdown"], N = ["onClick"], P = { class: "c-card__hea
|
|
|
120
104
|
key: 2,
|
|
121
105
|
innerHTML: D(o)(t, e)
|
|
122
106
|
}, null, 8, L))], 2)], 2))), 128))]),
|
|
123
|
-
|
|
107
|
+
m("span", {
|
|
124
108
|
class: "c-card__icon",
|
|
125
|
-
"aria-hidden": "true"
|
|
126
|
-
|
|
127
|
-
|
|
109
|
+
"aria-hidden": "true",
|
|
110
|
+
onClick: (e) => Q(v, e)
|
|
111
|
+
}, [...u[2] ||= [m("i", { class: "fa-solid fa-chevron-down" }, null, -1)]], 8, R)
|
|
112
|
+
], 8, M), A(m("div", z, [(b(!0), p(l, null, S(Y.value, (e) => (b(), p("div", {
|
|
128
113
|
key: e.property,
|
|
129
114
|
class: "c-card__field"
|
|
130
115
|
}, [
|
|
131
|
-
m("span",
|
|
116
|
+
m("span", B, E(e.label), 1),
|
|
132
117
|
C(i.$slots, `cell:${e.property}`, {
|
|
133
118
|
item: t,
|
|
134
119
|
col: e
|
|
@@ -146,7 +131,7 @@ var M = ["onClick", "onPointerdown"], N = ["onClick"], P = { class: "c-card__hea
|
|
|
146
131
|
]))), 128)), a.config.actions ? (b(), p("div", {
|
|
147
132
|
key: 0,
|
|
148
133
|
class: "c-card__actions",
|
|
149
|
-
onClick: u[
|
|
134
|
+
onClick: u[1] ||= j(() => {}, ["stop"])
|
|
150
135
|
}, [C(i.$slots, "actions", {
|
|
151
136
|
item: t,
|
|
152
137
|
index: v,
|
|
@@ -154,10 +139,10 @@ var M = ["onClick", "onPointerdown"], N = ["onClick"], P = { class: "c-card__hea
|
|
|
154
139
|
}, () => [h(r, {
|
|
155
140
|
actions: a.config.actions,
|
|
156
141
|
item: t
|
|
157
|
-
}, null, 8, ["actions", "item"])])])) : f("", !0)], 512), [[O,
|
|
142
|
+
}, null, 8, ["actions", "item"])])])) : f("", !0)], 512), [[O, q.value.has(v)]])], 2))), 128))], 2)) : (b(), p("div", V, [h(t, {
|
|
158
143
|
loading: !0,
|
|
159
144
|
size: "2.5rem"
|
|
160
|
-
})])), a.loading && a.items.length > 0 ? (b(), p("div",
|
|
145
|
+
})])), a.loading && a.items.length > 0 ? (b(), p("div", H, [h(t, {
|
|
161
146
|
loading: !0,
|
|
162
147
|
size: "2.5rem"
|
|
163
148
|
})])) : f("", !0)], 2);
|
|
@@ -165,4 +150,4 @@ var M = ["onClick", "onPointerdown"], N = ["onClick"], P = { class: "c-card__hea
|
|
|
165
150
|
}
|
|
166
151
|
});
|
|
167
152
|
//#endregion
|
|
168
|
-
export {
|
|
153
|
+
export { U as default };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admins-components71.js","names":[],"sources":["../src/components/data-table/DataCards.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { DataListConfig, DataCardsSettings, DataListSettings } from '@/types/data-list'\nimport DataCell from './DataCell.vue'\nimport DataListActions from './DataListActions.vue'\nexport { dataCardsSettingsDefaults } from '@/types/data-list'\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch, isVNode, nextTick } from 'vue'\nimport Checkbox from '@/components/Checkbox.vue'\nimport CopyToClipboard from '@/components/CopyToClipboard.vue'\nimport Loader from '@/components/Loader.vue'\nimport { useSelection } from '@/composables/useSelection'\nimport { dataCardsSettingsDefaults } from '@/types/data-list'\nimport { getColumnValue } from '@/utils/dataList'\nimport { shortUuid } from '@/utils/dataListConverters'\n\nconst props = withDefaults(\n defineProps<{\n config: DataListConfig\n items: Record<string, unknown>[]\n settings?: DataCardsSettings | DataListSettings\n loading?: boolean\n }>(),\n {\n settings: () => ({ ...dataCardsSettingsDefaults }),\n loading: false,\n },\n)\n\nconst emit = defineEmits<{\n 'selection-change': [selected: unknown[]]\n}>()\n\nconst { selectedKeys, toggle: toggleRow } = useSelection(\n () => props.items,\n () => props.config.selectableAttr,\n (s) => emit('selection-change', s),\n)\n\nconst openRowIndexes = ref<Set<number>>(new Set())\n\nconst cardsWrapperRef = ref<HTMLElement | null>(null)\n\nwatch(\n () => props.loading,\n async (isLoading) => {\n if (isLoading) {\n await nextTick()\n cardsWrapperRef.value?.scrollTo({ top: 0, behavior: 'smooth' })\n }\n },\n)\n\nwatch(\n () => props.items,\n () => {\n openRowIndexes.value = new Set()\n },\n)\n\nconst visibleColumns = computed(() => props.config.columns.filter((c) => c.visible !== false))\n\nconst cardHeaderColumns = computed(() => {\n const s = props.settings as any\n if (s?.cardHeaderColumns) {\n const cols = visibleColumns.value.filter((c) => s.cardHeaderColumns[c.property])\n if (cols.length > 0) {\n if (s.cardHeaderOrder) {\n const order = s.cardHeaderOrder as string[]\n return [...cols].sort((a, b) => {\n const ai = order.indexOf(a.property)\n const bi = order.indexOf(b.property)\n return (ai === -1 ? 999 : ai) - (bi === -1 ? 999 : bi)\n })\n }\n return cols\n }\n }\n const primary = visibleColumns.value.filter((c) => c.primary)\n if (primary.length > 0) return primary\n\n return visibleColumns.value.slice(0, 1)\n})\n\nlet longPressTimer: ReturnType<typeof setTimeout> | null = null\nlet longPressTriggered = false\n\nfunction onPointerDown(e: PointerEvent, item: Record<string, unknown>) {\n if (!props.config.selectableAttr) return\n if (e.button !== 0) return\n longPressTriggered = false\n longPressTimer = setTimeout(() => {\n longPressTriggered = true\n toggleRow(item)\n }, 500)\n}\n\nfunction onPointerUp() {\n if (longPressTimer) {\n clearTimeout(longPressTimer)\n longPressTimer = null\n }\n}\n\nfunction onContextMenu(e: MouseEvent) {\n if (longPressTriggered) {\n e.preventDefault()\n }\n}\n\nfunction onHeaderClick(index: number) {\n if (longPressTriggered) {\n longPressTriggered = false\n return\n }\n toggleAccordion(index)\n}\n\nfunction toggleAccordion(index: number) {\n if (openRowIndexes.value.has(index)) {\n openRowIndexes.value.delete(index)\n } else {\n openRowIndexes.value.add(index)\n }\n openRowIndexes.value = new Set(openRowIndexes.value)\n}\n</script>\n\n<template>\n <div\n ref=\"cardsWrapperRef\"\n class=\"ac-component c-cards-wrapper list-card-view\"\n :class=\"{ 'is-loading': loading }\"\n >\n <div\n v-if=\"!loading || items.length > 0\"\n class=\"c-cards\"\n :class=\"{ 'is-compact': settings.compact }\"\n >\n <div\n v-for=\"(item, index) in items\"\n :key=\"index\"\n class=\"c-card\"\n :class=\"{\n 'is-open': openRowIndexes.has(index),\n 'is-selected': config.selectableAttr && selectedKeys.has(item[config.selectableAttr]),\n }\"\n >\n <button\n type=\"button\"\n class=\"c-card__header\"\n @click=\"onHeaderClick(index)\"\n @pointerdown=\"onPointerDown($event, item)\"\n @pointerup=\"onPointerUp()\"\n @pointerleave=\"onPointerUp()\"\n @contextmenu=\"onContextMenu\"\n >\n <span\n v-if=\"config.selectableAttr\"\n class=\"c-card__check-zone\"\n @click.stop=\"toggleRow(item)\"\n >\n <Checkbox\n :model-value=\"!!selectedKeys.has(item[config.selectableAttr])\"\n @update:model-value=\"toggleRow(item)\"\n @click.stop\n />\n </span>\n <span class=\"c-card__heading\">\n <span\n v-for=\"(col, i) in cardHeaderColumns\"\n :key=\"col.property\"\n class=\"c-card__heading-item\"\n :class=\"[{ primary: col.primary }, col.headerClass]\"\n >\n <span class=\"c-card__label\">{{ !col.hideHeader ? col.label : '' }}</span>\n <span class=\"c-card__title\" :class=\"{ 'c-truncate': settings.compact && i === 0 }\">\n <component\n v-if=\"isVNode(getColumnValue(item, col))\"\n :is=\"getColumnValue(item, col)\"\n />\n <span\n v-else-if=\"col.type === 'uuid'\"\n v-tooltip=\"getColumnValue(item, col)\"\n v-html=\"shortUuid()(getColumnValue(item, col) as string)\"\n ></span>\n <span v-else v-html=\"getColumnValue(item, col)\"></span>\n </span>\n </span>\n </span>\n <span class=\"c-card__icon\" aria-hidden=\"true\"\n ><i class=\"fa-solid fa-chevron-down\"></i\n ></span>\n </button>\n\n <div v-show=\"openRowIndexes.has(index)\" class=\"c-card__body\">\n <div v-for=\"col in visibleColumns\" :key=\"col.property\" class=\"c-card__field\">\n <span class=\"c-card__field-label\">{{ col.label }}</span>\n <slot :name=\"`cell:${col.property}`\" :item=\"item\" :col=\"col\">\n <DataCell :item=\"item\" :col=\"col\" class=\"c-card__field-value\" :copy=\"false\" />\n </slot>\n\n <CopyToClipboard\n v-if=\"getColumnValue(item, col) && !col.hideCopyToClipboard\"\n class=\"c-card__field-copy click-expand\"\n :value=\"getColumnValue(item, col)\"\n />\n </div>\n\n <div v-if=\"config.actions\" class=\"c-card__actions\" @click.stop>\n <slot name=\"actions\" :item=\"item\" :index=\"index\" :actions=\"config.actions\">\n <DataListActions :actions=\"config.actions\" :item=\"item\" />\n </slot>\n </div>\n </div>\n </div>\n </div>\n <div v-else class=\"c-cards__loading-wrap\">\n <Loader :loading=\"true\" size=\"2.5rem\" />\n </div>\n <div v-if=\"loading && items.length > 0\" class=\"c-cards__backdrop\" aria-hidden=\"true\">\n <Loader :loading=\"true\" size=\"2.5rem\" />\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" src=\"@/styles/components/data-table/data-cards.scss\"></style>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"admins-components71.js","names":[],"sources":["../src/components/data-table/DataCards.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { DataListConfig, DataCardsSettings, DataListSettings } from '@/types/data-list'\nimport DataCell from './DataCell.vue'\nimport DataListActions from './DataListActions.vue'\nexport { dataCardsSettingsDefaults } from '@/types/data-list'\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch, isVNode, nextTick } from 'vue'\nimport Checkbox from '@/components/Checkbox.vue'\nimport CopyToClipboard from '@/components/CopyToClipboard.vue'\nimport Loader from '@/components/Loader.vue'\nimport { useSelection } from '@/composables/useSelection'\nimport { dataCardsSettingsDefaults } from '@/types/data-list'\nimport { getColumnValue } from '@/utils/dataList'\nimport { shortUuid } from '@/utils/dataListConverters'\n\nconst props = withDefaults(\n defineProps<{\n config: DataListConfig\n items: Record<string, unknown>[]\n settings?: DataCardsSettings | DataListSettings\n loading?: boolean\n }>(),\n {\n settings: () => ({ ...dataCardsSettingsDefaults }),\n loading: false,\n },\n)\n\nconst emit = defineEmits<{\n 'selection-change': [selected: unknown[]]\n}>()\n\nconst { selectedKeys, toggle: toggleRow } = useSelection(\n () => props.items,\n () => props.config.selectableAttr,\n (s) => emit('selection-change', s),\n)\n\nconst openRowIndexes = ref<Set<number>>(new Set())\n\nconst cardsWrapperRef = ref<HTMLElement | null>(null)\n\nwatch(\n () => props.loading,\n async (isLoading) => {\n if (isLoading) {\n await nextTick()\n cardsWrapperRef.value?.scrollTo({ top: 0, behavior: 'smooth' })\n }\n },\n)\n\nwatch(\n () => props.items,\n () => {\n openRowIndexes.value = new Set()\n },\n)\n\nconst visibleColumns = computed(() => props.config.columns.filter((c) => c.visible !== false))\n\nconst cardHeaderColumns = computed(() => {\n const s = props.settings as any\n if (s?.cardHeaderColumns) {\n const cols = visibleColumns.value.filter((c) => s.cardHeaderColumns[c.property])\n if (cols.length > 0) {\n if (s.cardHeaderOrder) {\n const order = s.cardHeaderOrder as string[]\n return [...cols].sort((a, b) => {\n const ai = order.indexOf(a.property)\n const bi = order.indexOf(b.property)\n return (ai === -1 ? 999 : ai) - (bi === -1 ? 999 : bi)\n })\n }\n return cols\n }\n }\n const primary = visibleColumns.value.filter((c) => c.primary)\n if (primary.length > 0) return primary\n\n return visibleColumns.value.slice(0, 1)\n})\n\nfunction onHeaderClick(index: number, item: Record<string, unknown>) {\n if (props.config.selectableAttr) {\n toggleRow(item)\n } else {\n toggleAccordion(index)\n }\n}\n\nfunction onChevronClick(index: number, e: MouseEvent) {\n e.stopPropagation()\n toggleAccordion(index)\n}\n\nfunction toggleAccordion(index: number) {\n if (openRowIndexes.value.has(index)) {\n openRowIndexes.value.delete(index)\n } else {\n openRowIndexes.value.add(index)\n }\n openRowIndexes.value = new Set(openRowIndexes.value)\n}\n</script>\n\n<template>\n <div\n ref=\"cardsWrapperRef\"\n class=\"ac-component c-cards-wrapper list-card-view\"\n :class=\"{ 'is-loading': loading }\"\n >\n <div\n v-if=\"!loading || items.length > 0\"\n class=\"c-cards\"\n :class=\"{ 'is-compact': settings.compact }\"\n >\n <div\n v-for=\"(item, index) in items\"\n :key=\"index\"\n class=\"c-card\"\n :class=\"{\n 'is-open': openRowIndexes.has(index),\n 'is-selected': config.selectableAttr && selectedKeys.has(item[config.selectableAttr]),\n }\"\n >\n <button type=\"button\" class=\"c-card__header\" @click=\"onHeaderClick(index, item)\">\n <span\n v-if=\"config.selectableAttr\"\n class=\"c-card__check-zone\"\n @click.stop=\"toggleRow(item)\"\n >\n <Checkbox\n :model-value=\"!!selectedKeys.has(item[config.selectableAttr])\"\n @update:model-value=\"toggleRow(item)\"\n @click.stop\n />\n </span>\n <span class=\"c-card__heading\">\n <span\n v-for=\"(col, i) in cardHeaderColumns\"\n :key=\"col.property\"\n class=\"c-card__heading-item\"\n :class=\"[{ primary: col.primary }, col.headerClass]\"\n >\n <span class=\"c-card__label\">{{ !col.hideHeader ? col.label : '' }}</span>\n <span class=\"c-card__title\" :class=\"{ 'c-truncate': settings.compact && i === 0 }\">\n <component\n v-if=\"isVNode(getColumnValue(item, col))\"\n :is=\"getColumnValue(item, col)\"\n />\n <span\n v-else-if=\"col.type === 'uuid'\"\n v-tooltip=\"getColumnValue(item, col)\"\n v-html=\"shortUuid()(getColumnValue(item, col) as string)\"\n ></span>\n <span v-else v-html=\"getColumnValue(item, col)\"></span>\n </span>\n </span>\n </span>\n <span class=\"c-card__icon\" aria-hidden=\"true\" @click=\"onChevronClick(index, $event)\"\n ><i class=\"fa-solid fa-chevron-down\"></i\n ></span>\n </button>\n\n <div v-show=\"openRowIndexes.has(index)\" class=\"c-card__body\">\n <div v-for=\"col in visibleColumns\" :key=\"col.property\" class=\"c-card__field\">\n <span class=\"c-card__field-label\">{{ col.label }}</span>\n <slot :name=\"`cell:${col.property}`\" :item=\"item\" :col=\"col\">\n <DataCell :item=\"item\" :col=\"col\" class=\"c-card__field-value\" :copy=\"false\" />\n </slot>\n\n <CopyToClipboard\n v-if=\"getColumnValue(item, col) && !col.hideCopyToClipboard\"\n class=\"c-card__field-copy click-expand\"\n :value=\"getColumnValue(item, col)\"\n />\n </div>\n\n <div v-if=\"config.actions\" class=\"c-card__actions\" @click.stop>\n <slot name=\"actions\" :item=\"item\" :index=\"index\" :actions=\"config.actions\">\n <DataListActions :actions=\"config.actions\" :item=\"item\" />\n </slot>\n </div>\n </div>\n </div>\n </div>\n <div v-else class=\"c-cards__loading-wrap\">\n <Loader :loading=\"true\" size=\"2.5rem\" />\n </div>\n <div v-if=\"loading && items.length > 0\" class=\"c-cards__backdrop\" aria-hidden=\"true\">\n <Loader :loading=\"true\" size=\"2.5rem\" />\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" src=\"@/styles/components/data-table/data-cards.scss\"></style>\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admins-components73.js","names":[],"sources":["../src/components/data-table/DataCards.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { DataListConfig, DataCardsSettings, DataListSettings } from '@/types/data-list'\nimport DataCell from './DataCell.vue'\nimport DataListActions from './DataListActions.vue'\nexport { dataCardsSettingsDefaults } from '@/types/data-list'\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch, isVNode, nextTick } from 'vue'\nimport Checkbox from '@/components/Checkbox.vue'\nimport CopyToClipboard from '@/components/CopyToClipboard.vue'\nimport Loader from '@/components/Loader.vue'\nimport { useSelection } from '@/composables/useSelection'\nimport { dataCardsSettingsDefaults } from '@/types/data-list'\nimport { getColumnValue } from '@/utils/dataList'\nimport { shortUuid } from '@/utils/dataListConverters'\n\nconst props = withDefaults(\n defineProps<{\n config: DataListConfig\n items: Record<string, unknown>[]\n settings?: DataCardsSettings | DataListSettings\n loading?: boolean\n }>(),\n {\n settings: () => ({ ...dataCardsSettingsDefaults }),\n loading: false,\n },\n)\n\nconst emit = defineEmits<{\n 'selection-change': [selected: unknown[]]\n}>()\n\nconst { selectedKeys, toggle: toggleRow } = useSelection(\n () => props.items,\n () => props.config.selectableAttr,\n (s) => emit('selection-change', s),\n)\n\nconst openRowIndexes = ref<Set<number>>(new Set())\n\nconst cardsWrapperRef = ref<HTMLElement | null>(null)\n\nwatch(\n () => props.loading,\n async (isLoading) => {\n if (isLoading) {\n await nextTick()\n cardsWrapperRef.value?.scrollTo({ top: 0, behavior: 'smooth' })\n }\n },\n)\n\nwatch(\n () => props.items,\n () => {\n openRowIndexes.value = new Set()\n },\n)\n\nconst visibleColumns = computed(() => props.config.columns.filter((c) => c.visible !== false))\n\nconst cardHeaderColumns = computed(() => {\n const s = props.settings as any\n if (s?.cardHeaderColumns) {\n const cols = visibleColumns.value.filter((c) => s.cardHeaderColumns[c.property])\n if (cols.length > 0) {\n if (s.cardHeaderOrder) {\n const order = s.cardHeaderOrder as string[]\n return [...cols].sort((a, b) => {\n const ai = order.indexOf(a.property)\n const bi = order.indexOf(b.property)\n return (ai === -1 ? 999 : ai) - (bi === -1 ? 999 : bi)\n })\n }\n return cols\n }\n }\n const primary = visibleColumns.value.filter((c) => c.primary)\n if (primary.length > 0) return primary\n\n return visibleColumns.value.slice(0, 1)\n})\n\
|
|
1
|
+
{"version":3,"file":"admins-components73.js","names":[],"sources":["../src/components/data-table/DataCards.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { DataListConfig, DataCardsSettings, DataListSettings } from '@/types/data-list'\nimport DataCell from './DataCell.vue'\nimport DataListActions from './DataListActions.vue'\nexport { dataCardsSettingsDefaults } from '@/types/data-list'\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch, isVNode, nextTick } from 'vue'\nimport Checkbox from '@/components/Checkbox.vue'\nimport CopyToClipboard from '@/components/CopyToClipboard.vue'\nimport Loader from '@/components/Loader.vue'\nimport { useSelection } from '@/composables/useSelection'\nimport { dataCardsSettingsDefaults } from '@/types/data-list'\nimport { getColumnValue } from '@/utils/dataList'\nimport { shortUuid } from '@/utils/dataListConverters'\n\nconst props = withDefaults(\n defineProps<{\n config: DataListConfig\n items: Record<string, unknown>[]\n settings?: DataCardsSettings | DataListSettings\n loading?: boolean\n }>(),\n {\n settings: () => ({ ...dataCardsSettingsDefaults }),\n loading: false,\n },\n)\n\nconst emit = defineEmits<{\n 'selection-change': [selected: unknown[]]\n}>()\n\nconst { selectedKeys, toggle: toggleRow } = useSelection(\n () => props.items,\n () => props.config.selectableAttr,\n (s) => emit('selection-change', s),\n)\n\nconst openRowIndexes = ref<Set<number>>(new Set())\n\nconst cardsWrapperRef = ref<HTMLElement | null>(null)\n\nwatch(\n () => props.loading,\n async (isLoading) => {\n if (isLoading) {\n await nextTick()\n cardsWrapperRef.value?.scrollTo({ top: 0, behavior: 'smooth' })\n }\n },\n)\n\nwatch(\n () => props.items,\n () => {\n openRowIndexes.value = new Set()\n },\n)\n\nconst visibleColumns = computed(() => props.config.columns.filter((c) => c.visible !== false))\n\nconst cardHeaderColumns = computed(() => {\n const s = props.settings as any\n if (s?.cardHeaderColumns) {\n const cols = visibleColumns.value.filter((c) => s.cardHeaderColumns[c.property])\n if (cols.length > 0) {\n if (s.cardHeaderOrder) {\n const order = s.cardHeaderOrder as string[]\n return [...cols].sort((a, b) => {\n const ai = order.indexOf(a.property)\n const bi = order.indexOf(b.property)\n return (ai === -1 ? 999 : ai) - (bi === -1 ? 999 : bi)\n })\n }\n return cols\n }\n }\n const primary = visibleColumns.value.filter((c) => c.primary)\n if (primary.length > 0) return primary\n\n return visibleColumns.value.slice(0, 1)\n})\n\nfunction onHeaderClick(index: number, item: Record<string, unknown>) {\n if (props.config.selectableAttr) {\n toggleRow(item)\n } else {\n toggleAccordion(index)\n }\n}\n\nfunction onChevronClick(index: number, e: MouseEvent) {\n e.stopPropagation()\n toggleAccordion(index)\n}\n\nfunction toggleAccordion(index: number) {\n if (openRowIndexes.value.has(index)) {\n openRowIndexes.value.delete(index)\n } else {\n openRowIndexes.value.add(index)\n }\n openRowIndexes.value = new Set(openRowIndexes.value)\n}\n</script>\n\n<template>\n <div\n ref=\"cardsWrapperRef\"\n class=\"ac-component c-cards-wrapper list-card-view\"\n :class=\"{ 'is-loading': loading }\"\n >\n <div\n v-if=\"!loading || items.length > 0\"\n class=\"c-cards\"\n :class=\"{ 'is-compact': settings.compact }\"\n >\n <div\n v-for=\"(item, index) in items\"\n :key=\"index\"\n class=\"c-card\"\n :class=\"{\n 'is-open': openRowIndexes.has(index),\n 'is-selected': config.selectableAttr && selectedKeys.has(item[config.selectableAttr]),\n }\"\n >\n <button type=\"button\" class=\"c-card__header\" @click=\"onHeaderClick(index, item)\">\n <span\n v-if=\"config.selectableAttr\"\n class=\"c-card__check-zone\"\n @click.stop=\"toggleRow(item)\"\n >\n <Checkbox\n :model-value=\"!!selectedKeys.has(item[config.selectableAttr])\"\n @update:model-value=\"toggleRow(item)\"\n @click.stop\n />\n </span>\n <span class=\"c-card__heading\">\n <span\n v-for=\"(col, i) in cardHeaderColumns\"\n :key=\"col.property\"\n class=\"c-card__heading-item\"\n :class=\"[{ primary: col.primary }, col.headerClass]\"\n >\n <span class=\"c-card__label\">{{ !col.hideHeader ? col.label : '' }}</span>\n <span class=\"c-card__title\" :class=\"{ 'c-truncate': settings.compact && i === 0 }\">\n <component\n v-if=\"isVNode(getColumnValue(item, col))\"\n :is=\"getColumnValue(item, col)\"\n />\n <span\n v-else-if=\"col.type === 'uuid'\"\n v-tooltip=\"getColumnValue(item, col)\"\n v-html=\"shortUuid()(getColumnValue(item, col) as string)\"\n ></span>\n <span v-else v-html=\"getColumnValue(item, col)\"></span>\n </span>\n </span>\n </span>\n <span class=\"c-card__icon\" aria-hidden=\"true\" @click=\"onChevronClick(index, $event)\"\n ><i class=\"fa-solid fa-chevron-down\"></i\n ></span>\n </button>\n\n <div v-show=\"openRowIndexes.has(index)\" class=\"c-card__body\">\n <div v-for=\"col in visibleColumns\" :key=\"col.property\" class=\"c-card__field\">\n <span class=\"c-card__field-label\">{{ col.label }}</span>\n <slot :name=\"`cell:${col.property}`\" :item=\"item\" :col=\"col\">\n <DataCell :item=\"item\" :col=\"col\" class=\"c-card__field-value\" :copy=\"false\" />\n </slot>\n\n <CopyToClipboard\n v-if=\"getColumnValue(item, col) && !col.hideCopyToClipboard\"\n class=\"c-card__field-copy click-expand\"\n :value=\"getColumnValue(item, col)\"\n />\n </div>\n\n <div v-if=\"config.actions\" class=\"c-card__actions\" @click.stop>\n <slot name=\"actions\" :item=\"item\" :index=\"index\" :actions=\"config.actions\">\n <DataListActions :actions=\"config.actions\" :item=\"item\" />\n </slot>\n </div>\n </div>\n </div>\n </div>\n <div v-else class=\"c-cards__loading-wrap\">\n <Loader :loading=\"true\" size=\"2.5rem\" />\n </div>\n <div v-if=\"loading && items.length > 0\" class=\"c-cards__backdrop\" aria-hidden=\"true\">\n <Loader :loading=\"true\" size=\"2.5rem\" />\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" src=\"@/styles/components/data-table/data-cards.scss\"></style>\n"],"mappings":""}
|
|
@@ -9,6 +9,8 @@ declare const __VLS_export: __VLS_WithSlots<import('vue').DefineComponent<ModalP
|
|
|
9
9
|
}, string, import('vue').PublicProps, Readonly<ModalProps> & Readonly<{
|
|
10
10
|
onClose?: (() => any) | undefined;
|
|
11
11
|
}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>, {
|
|
12
|
+
header?: (props: {}) => any;
|
|
13
|
+
} & {
|
|
12
14
|
default?: (props: {}) => any;
|
|
13
15
|
} & {
|
|
14
16
|
footer?: (props: {}) => any;
|
|
@@ -2,6 +2,7 @@ export interface ArticlePickerElementConfig {
|
|
|
2
2
|
searchArticleApiUrl: string;
|
|
3
3
|
searchArticleWidgetUrl: string;
|
|
4
4
|
showIds?: boolean;
|
|
5
|
+
articleModalActionsPosition?: 'header' | 'footer' | 'both';
|
|
5
6
|
}
|
|
6
7
|
export declare let apeConfig: ArticlePickerElementConfig;
|
|
7
8
|
export declare function configureArticlePickerElement(apec: ArticlePickerElementConfig): ArticlePickerElementConfig;
|
package/dist/styles/components/data-table/data-cards.scss_vue_type_style_index_0_src_true_lang.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
.ac-component .c-cards-wrapper,.ac-component.c-cards-wrapper{max-height:var(--data-list-max-height,75dvh);-webkit-overflow-scrolling:touch;position:relative;overflow:auto}.c-data-list--fill-height>.ac-component .c-cards-wrapper,.c-data-list--fill-height>.ac-component.c-cards-wrapper{flex:auto;height:auto;min-height:0;max-height:none}.ac-component .c-cards-wrapper.is-loading,.ac-component.c-cards-wrapper.is-loading{touch-action:none;overflow:hidden}.ac-component .c-cards-wrapper.is-loading .c-cards,.ac-component.c-cards-wrapper.is-loading .c-cards{opacity:.45;transition:opacity .15s ease-out}.ac-component .c-cards-wrapper .c-cards,.ac-component.c-cards-wrapper .c-cards{border-top:2px solid var(--neutral-200);border-bottom:2px solid var(--neutral-200);flex-direction:column;gap:.5rem;padding:.5rem 0;font-size:.875rem;display:flex}.ac-component .c-cards-wrapper .c-cards.is-compact,.ac-component.c-cards-wrapper .c-cards.is-compact{gap:.25rem}.ac-component .c-cards-wrapper .c-cards.is-compact .c-card__header,.ac-component.c-cards-wrapper .c-cards.is-compact .c-card__header{--header-padding-y:.375rem}.ac-component .c-cards-wrapper .c-cards.is-compact .c-card__label,.ac-component.c-cards-wrapper .c-cards.is-compact .c-card__label{font-size:.6rem}.ac-component .c-cards-wrapper .c-cards.is-compact .c-card__field,.ac-component.c-cards-wrapper .c-cards.is-compact .c-card__field{min-height:unset;padding-top:.5rem;padding-bottom:.375rem}.ac-component .c-cards-wrapper .c-cards.is-compact .c-card__body,.ac-component.c-cards-wrapper .c-cards.is-compact .c-card__body{row-gap:.5rem;padding-bottom:.5rem}.ac-component .c-cards-wrapper .c-cards.is-compact .c-card__actions,.ac-component.c-cards-wrapper .c-cards.is-compact .c-card__actions{padding-top:0}.ac-component .c-cards-wrapper .c-cards__loading-wrap,.ac-component.c-cards-wrapper .c-cards__loading-wrap{border-top:2px solid var(--neutral-200);border-bottom:2px solid var(--neutral-200);justify-content:center;align-items:center;width:100%;padding:2rem;display:flex}.ac-component .c-cards-wrapper .c-cards__backdrop,.ac-component.c-cards-wrapper .c-cards__backdrop{z-index:1;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);pointer-events:none;background:#fff9;justify-content:center;align-items:center;animation:.15s ease-out c-cards-backdrop-in;display:flex;position:absolute;inset:0}.ac-component .c-cards-wrapper .c-card,.ac-component.c-cards-wrapper .c-card{border:1px solid var(--neutral-200);background:var(--neutral-0);border-radius:.75rem;transition:border-color .15s,box-shadow .15s}.ac-component .c-cards-wrapper .c-card.is-open,.ac-component.c-cards-wrapper .c-card.is-open{border-color:var(--premium-500)}.ac-component .c-cards-wrapper .c-card.is-open .c-card__header,.ac-component.c-cards-wrapper .c-card.is-open .c-card__header{background:var(--premium-50)}.ac-component .c-cards-wrapper .c-card.is-open .c-card__header:hover,.ac-component.c-cards-wrapper .c-card.is-open .c-card__header:hover{background:var(--premium-100)}.ac-component .c-cards-wrapper .c-card.is-open .c-card__icon,.ac-component.c-cards-wrapper .c-card.is-open .c-card__icon{transform:rotate(180deg)}.ac-component .c-cards-wrapper .c-card.is-selected,.ac-component.c-cards-wrapper .c-card.is-selected{border-color:var(--premium-400);box-shadow:0 0 0 1px var(--premium-200)}.ac-component .c-cards-wrapper .c-card.is-selected .c-card__header,.ac-component.c-cards-wrapper .c-card.is-selected .c-card__header{background:var(--site-100)}.ac-component .c-cards-wrapper .c-card.is-selected .c-card__header:hover,.ac-component.c-cards-wrapper .c-card.is-selected .c-card__header:hover{background:var(--site-200)}.ac-component .c-cards-wrapper .c-card__header,.ac-component.c-cards-wrapper .c-card__header{--header-padding-y:.75rem;--header-padding-x:.75rem;width:100%;padding:var(--header-padding-y) var(--header-padding-x);border-radius:inherit;background:var(--neutral-50);color:inherit;text-align:left;cursor:pointer;border:0;align-items:center;gap:.5rem;line-height:1.2;transition:background-color .15s;display:flex}.ac-component .c-cards-wrapper .c-card__header:hover,.ac-component.c-cards-wrapper .c-card__header:hover{background:var(--premium-100)}.ac-component .c-cards-wrapper .c-card__check-zone,.ac-component.c-cards-wrapper .c-card__check-zone{padding:0 .5rem 0 var(--header-padding-x);margin:calc(-1 * var(--header-padding-y)) -.5rem calc(-1 * var(--header-padding-y)) calc(-1 * var(--header-padding-x));align-self:stretch;align-items:center;display:flex}.ac-component .c-cards-wrapper .c-card__check-zone .c-checkbox,.ac-component.c-cards-wrapper .c-card__check-zone .c-checkbox{width:1.25rem;height:1.25rem}.ac-component .c-cards-wrapper .c-card__heading,.ac-component.c-cards-wrapper .c-card__heading{flex-direction:row;flex:auto;gap:.5rem;min-width:0;display:flex}.ac-component .c-cards-wrapper .c-card__heading-item,.ac-component.c-cards-wrapper .c-card__heading-item{flex-direction:column;flex:1 1 0;min-width:0;display:flex}.ac-component .c-cards-wrapper .c-card__heading-item.primary,.ac-component.c-cards-wrapper .c-card__heading-item.primary{flex:2 1 0}.ac-component .c-cards-wrapper .c-card__label,.ac-component.c-cards-wrapper .c-card__label{color:var(--neutral-600);text-transform:uppercase;letter-spacing:.03em;font-size:.675rem;font-weight:700}.ac-component .c-cards-wrapper .c-card__title,.ac-component.c-cards-wrapper .c-card__title{color:var(--neutral-800);font-size:.85rem;font-weight:600}.ac-component .c-cards-wrapper .c-card__icon,.ac-component.c-cards-wrapper .c-card__icon{color:var(--neutral-700);font-size:.9rem;transition:transform .2s}.ac-component .c-cards-wrapper .c-card__body,.ac-component.c-cards-wrapper .c-card__body{--field-gap-x:.375rem;gap:.75rem var(--field-gap-x);flex-wrap:wrap;padding:.625rem;display:flex;container-type:inline-size}.ac-component .c-cards-wrapper .c-card__field,.ac-component.c-cards-wrapper .c-card__field{flex:1 1 calc(50% - .5 * var(--field-gap-x));border:1px solid var(--neutral-200);border-radius:8px;align-items:center;min-height:2.5rem;padding:.5rem;display:flex;position:relative}.ac-component .c-cards-wrapper .c-card__field:hover .c-copy-btn,.ac-component.c-cards-wrapper .c-card__field:hover .c-copy-btn{opacity:1}.ac-component .c-cards-wrapper .c-card__field-value,.ac-component.c-cards-wrapper .c-card__field-value{overflow-wrap:break-word;word-break:break-word;flex:1;font-size:.875rem}.ac-component .c-cards-wrapper .c-card__field-label,.ac-component.c-cards-wrapper .c-card__field-label{letter-spacing:.02em;background:var(--neutral-0);color:var(--neutral-600);padding:0 .125rem;font-size:.7rem;font-weight:700;position:absolute;top:-.5lh;left:.5rem}.ac-component .c-cards-wrapper .c-card__field .c-copy-btn,.ac-component.c-cards-wrapper .c-card__field .c-copy-btn{opacity:0}.ac-component .c-cards-wrapper .c-card__field-copy,.ac-component.c-cards-wrapper .c-card__field-copy{background:var(--neutral-0);padding:.125rem;position:absolute;top:-.625lh;right:.375rem}.ac-component .c-cards-wrapper .c-card__field-copy:hover,.ac-component.c-cards-wrapper .c-card__field-copy:hover{color:var(--premium-600);background:var(--background-100)}@media (hover:none),(pointer:coarse){.ac-component .c-cards-wrapper .c-card__field:focus-within,.ac-component .c-cards-wrapper .c-card__field:hover,.ac-component.c-cards-wrapper .c-card__field:focus-within,.ac-component.c-cards-wrapper .c-card__field:hover{border-color:var(--neutral-300)}.ac-component .c-cards-wrapper .c-card__field:focus-within .c-card__field-copy,.ac-component .c-cards-wrapper .c-card__field:hover .c-card__field-copy,.ac-component.c-cards-wrapper .c-card__field:focus-within .c-card__field-copy,.ac-component.c-cards-wrapper .c-card__field:hover .c-card__field-copy{opacity:1}}.ac-component .c-cards-wrapper .c-card__actions,.ac-component.c-cards-wrapper .c-card__actions{flex-wrap:wrap;flex:100%;justify-content:space-around;align-items:center;gap:.5rem;padding-top:.25rem;display:flex}@keyframes c-cards-backdrop-in{0%{opacity:0}to{opacity:1}}@container (width<=526px){.ac-component .c-cards-wrapper .c-card__field,.ac-component.c-cards-wrapper .c-card__field{flex-basis:100%}}
|
|
1
|
+
.ac-component .c-cards-wrapper,.ac-component.c-cards-wrapper{max-height:var(--data-list-max-height,75dvh);-webkit-overflow-scrolling:touch;position:relative;overflow:auto}.c-data-list--fill-height>.ac-component .c-cards-wrapper,.c-data-list--fill-height>.ac-component.c-cards-wrapper{flex:auto;height:auto;min-height:0;max-height:none}.ac-component .c-cards-wrapper.is-loading,.ac-component.c-cards-wrapper.is-loading{touch-action:none;overflow:hidden}.ac-component .c-cards-wrapper.is-loading .c-cards,.ac-component.c-cards-wrapper.is-loading .c-cards{opacity:.45;transition:opacity .15s ease-out}.ac-component .c-cards-wrapper .c-cards,.ac-component.c-cards-wrapper .c-cards{border-top:2px solid var(--neutral-200);border-bottom:2px solid var(--neutral-200);flex-direction:column;gap:.5rem;padding:.5rem 0;font-size:.875rem;display:flex}.ac-component .c-cards-wrapper .c-cards.is-compact,.ac-component.c-cards-wrapper .c-cards.is-compact{gap:.25rem}.ac-component .c-cards-wrapper .c-cards.is-compact .c-card__header,.ac-component.c-cards-wrapper .c-cards.is-compact .c-card__header{--header-padding-y:.375rem}.ac-component .c-cards-wrapper .c-cards.is-compact .c-card__label,.ac-component.c-cards-wrapper .c-cards.is-compact .c-card__label{font-size:.6rem}.ac-component .c-cards-wrapper .c-cards.is-compact .c-card__field,.ac-component.c-cards-wrapper .c-cards.is-compact .c-card__field{min-height:unset;padding-top:.5rem;padding-bottom:.375rem}.ac-component .c-cards-wrapper .c-cards.is-compact .c-card__body,.ac-component.c-cards-wrapper .c-cards.is-compact .c-card__body{row-gap:.5rem;padding-bottom:.5rem}.ac-component .c-cards-wrapper .c-cards.is-compact .c-card__actions,.ac-component.c-cards-wrapper .c-cards.is-compact .c-card__actions{padding-top:0}.ac-component .c-cards-wrapper .c-cards__loading-wrap,.ac-component.c-cards-wrapper .c-cards__loading-wrap{border-top:2px solid var(--neutral-200);border-bottom:2px solid var(--neutral-200);justify-content:center;align-items:center;width:100%;padding:2rem;display:flex}.ac-component .c-cards-wrapper .c-cards__backdrop,.ac-component.c-cards-wrapper .c-cards__backdrop{z-index:1;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);pointer-events:none;background:#fff9;justify-content:center;align-items:center;animation:.15s ease-out c-cards-backdrop-in;display:flex;position:absolute;inset:0}.ac-component .c-cards-wrapper .c-card,.ac-component.c-cards-wrapper .c-card{border:1px solid var(--neutral-200);background:var(--neutral-0);border-radius:.75rem;transition:border-color .15s,box-shadow .15s}.ac-component .c-cards-wrapper .c-card.is-open,.ac-component.c-cards-wrapper .c-card.is-open{border-color:var(--premium-500)}.ac-component .c-cards-wrapper .c-card.is-open .c-card__header,.ac-component.c-cards-wrapper .c-card.is-open .c-card__header{background:var(--premium-50)}.ac-component .c-cards-wrapper .c-card.is-open .c-card__header:hover,.ac-component.c-cards-wrapper .c-card.is-open .c-card__header:hover{background:var(--premium-100)}.ac-component .c-cards-wrapper .c-card.is-open .c-card__icon,.ac-component.c-cards-wrapper .c-card.is-open .c-card__icon{transform:rotate(180deg)}.ac-component .c-cards-wrapper .c-card.is-selected,.ac-component.c-cards-wrapper .c-card.is-selected{border-color:var(--premium-400);box-shadow:0 0 0 1px var(--premium-200)}.ac-component .c-cards-wrapper .c-card.is-selected .c-card__header,.ac-component.c-cards-wrapper .c-card.is-selected .c-card__header{background:var(--site-100)}.ac-component .c-cards-wrapper .c-card.is-selected .c-card__header:hover,.ac-component.c-cards-wrapper .c-card.is-selected .c-card__header:hover{background:var(--site-200)}.ac-component .c-cards-wrapper .c-card__header,.ac-component.c-cards-wrapper .c-card__header{--header-padding-y:.75rem;--header-padding-x:.75rem;width:100%;padding:var(--header-padding-y) var(--header-padding-x);border-radius:inherit;background:var(--neutral-50);color:inherit;text-align:left;cursor:pointer;border:0;align-items:center;gap:.5rem;line-height:1.2;transition:background-color .15s;display:flex}.ac-component .c-cards-wrapper .c-card__header:hover,.ac-component.c-cards-wrapper .c-card__header:hover{background:var(--premium-100)}.ac-component .c-cards-wrapper .c-card__check-zone,.ac-component.c-cards-wrapper .c-card__check-zone{padding:0 .5rem 0 var(--header-padding-x);margin:calc(-1 * var(--header-padding-y)) -.5rem calc(-1 * var(--header-padding-y)) calc(-1 * var(--header-padding-x));align-self:stretch;align-items:center;display:flex}.ac-component .c-cards-wrapper .c-card__check-zone .c-checkbox,.ac-component.c-cards-wrapper .c-card__check-zone .c-checkbox{width:1.25rem;height:1.25rem}.ac-component .c-cards-wrapper .c-card__heading,.ac-component.c-cards-wrapper .c-card__heading{flex-direction:row;flex:auto;gap:.5rem;min-width:0;display:flex}.ac-component .c-cards-wrapper .c-card__heading-item,.ac-component.c-cards-wrapper .c-card__heading-item{flex-direction:column;flex:1 1 0;min-width:0;display:flex}.ac-component .c-cards-wrapper .c-card__heading-item.primary,.ac-component.c-cards-wrapper .c-card__heading-item.primary{flex:2 1 0}.ac-component .c-cards-wrapper .c-card__label,.ac-component.c-cards-wrapper .c-card__label{color:var(--neutral-600);text-transform:uppercase;letter-spacing:.03em;font-size:.675rem;font-weight:700}.ac-component .c-cards-wrapper .c-card__title,.ac-component.c-cards-wrapper .c-card__title{color:var(--neutral-800);font-size:.85rem;font-weight:600}.ac-component .c-cards-wrapper .c-card__icon,.ac-component.c-cards-wrapper .c-card__icon{margin:calc(-1 * var(--header-padding-y)) calc(-1 * var(--header-padding-x)) calc(-1 * var(--header-padding-y)) 0;color:var(--neutral-700);cursor:pointer;justify-content:center;align-self:stretch;align-items:center;padding:0 .75rem;font-size:.9rem;transition:transform .2s;display:flex}.ac-component .c-cards-wrapper .c-card__body,.ac-component.c-cards-wrapper .c-card__body{--field-gap-x:.375rem;gap:.75rem var(--field-gap-x);flex-wrap:wrap;padding:.625rem;display:flex;container-type:inline-size}.ac-component .c-cards-wrapper .c-card__field,.ac-component.c-cards-wrapper .c-card__field{flex:1 1 calc(50% - .5 * var(--field-gap-x));border:1px solid var(--neutral-200);border-radius:8px;align-items:center;min-height:2.5rem;padding:.5rem;display:flex;position:relative}.ac-component .c-cards-wrapper .c-card__field:hover .c-copy-btn,.ac-component.c-cards-wrapper .c-card__field:hover .c-copy-btn{opacity:1}.ac-component .c-cards-wrapper .c-card__field-value,.ac-component.c-cards-wrapper .c-card__field-value{overflow-wrap:break-word;word-break:break-word;flex:1;font-size:.875rem}.ac-component .c-cards-wrapper .c-card__field-label,.ac-component.c-cards-wrapper .c-card__field-label{letter-spacing:.02em;background:var(--neutral-0);color:var(--neutral-600);padding:0 .125rem;font-size:.7rem;font-weight:700;position:absolute;top:-.5lh;left:.5rem}.ac-component .c-cards-wrapper .c-card__field .c-copy-btn,.ac-component.c-cards-wrapper .c-card__field .c-copy-btn{opacity:0}.ac-component .c-cards-wrapper .c-card__field-copy,.ac-component.c-cards-wrapper .c-card__field-copy{background:var(--neutral-0);padding:.125rem;position:absolute;top:-.625lh;right:.375rem}.ac-component .c-cards-wrapper .c-card__field-copy:hover,.ac-component.c-cards-wrapper .c-card__field-copy:hover{color:var(--premium-600);background:var(--background-100)}@media (hover:none),(pointer:coarse){.ac-component .c-cards-wrapper .c-card__field:focus-within,.ac-component .c-cards-wrapper .c-card__field:hover,.ac-component.c-cards-wrapper .c-card__field:focus-within,.ac-component.c-cards-wrapper .c-card__field:hover{border-color:var(--neutral-300)}.ac-component .c-cards-wrapper .c-card__field:focus-within .c-card__field-copy,.ac-component .c-cards-wrapper .c-card__field:hover .c-card__field-copy,.ac-component.c-cards-wrapper .c-card__field:focus-within .c-card__field-copy,.ac-component.c-cards-wrapper .c-card__field:hover .c-card__field-copy{opacity:1}}.ac-component .c-cards-wrapper .c-card__actions,.ac-component.c-cards-wrapper .c-card__actions{flex-wrap:wrap;flex:100%;justify-content:space-around;align-items:center;gap:.5rem;padding-top:.25rem;display:flex}@keyframes c-cards-backdrop-in{0%{opacity:0}to{opacity:1}}@container (width<=526px){.ac-component .c-cards-wrapper .c-card__field,.ac-component.c-cards-wrapper .c-card__field{flex-basis:100%}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.ac-component .c-modal
|
|
1
|
+
.ac-component dialog.c-modal::backdrop{-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);background:#0006}.ac-component dialog.c-modal{color:var(--neutral-900);background:var(--neutral-0);border:0;border-radius:.75rem;flex-direction:column;min-width:clamp(18rem,60dvw,26rem);max-width:calc(100dvw - 2rem);max-height:calc(100dvh - 4rem);margin:auto;padding:0;animation:.15s ease-out c-modal-enter;display:flex;overflow:hidden;box-shadow:0 8px 32px #0000001f}.ac-component .c-modal-header{border-bottom:1px solid var(--neutral-100);justify-content:space-between;align-items:center;padding:.5rem;display:flex}.ac-component .c-modal-title{color:var(--neutral-900);padding-left:.5rem;font-size:1rem;font-weight:600}.ac-component .c-modal-close{color:var(--neutral-600);cursor:pointer;background:0 0;border:none;border-radius:999px;justify-content:center;align-items:center;padding:.5rem .625rem;font-size:1rem;transition:background-color .15s,color .15s;display:inline-flex}.ac-component .c-modal-close i{transform:translate(.5px)}.ac-component .c-modal-close:hover{background:var(--neutral-100);color:var(--neutral-900)}.ac-component .c-modal-close:focus-visible{outline:none;box-shadow:0 0 0 2px #f265221f}.ac-component .c-modal-body{flex-direction:column;flex:1;padding:.5rem .75rem;display:flex;overflow-y:auto}.ac-component .c-modal-footer{border-top:1px solid var(--neutral-100);justify-content:flex-end;align-items:center;gap:.5rem;padding:.75rem 1.25rem;display:flex}.ac-component .c-confirm-modal-message{color:var(--neutral-700);margin:0;font-size:.875rem;line-height:1.5}@keyframes c-modal-enter{0%{opacity:0;transform:scale(.95)translateY(-.5rem)}to{opacity:1;transform:scale(1)translateY(0)}}
|
package/dist/test.html
ADDED
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="hu">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<title>search-posts-widget standalone test</title>
|
|
6
|
+
<style>
|
|
7
|
+
body { font-family: system-ui, sans-serif; margin: 2rem; }
|
|
8
|
+
#log {
|
|
9
|
+
margin-top: 1rem;
|
|
10
|
+
padding: 1rem;
|
|
11
|
+
background: #f4f4f4;
|
|
12
|
+
border: 1px solid #ddd;
|
|
13
|
+
font-family: monospace;
|
|
14
|
+
white-space: pre-wrap;
|
|
15
|
+
font-size: 12px;
|
|
16
|
+
max-height: 300px;
|
|
17
|
+
overflow-y: auto;
|
|
18
|
+
}
|
|
19
|
+
dialog {
|
|
20
|
+
padding: 0;
|
|
21
|
+
border: 1px solid #999;
|
|
22
|
+
border-radius: 8px;
|
|
23
|
+
width: 90vw;
|
|
24
|
+
height: 80vh;
|
|
25
|
+
}
|
|
26
|
+
dialog::backdrop { background: rgba(0,0,0,0.4); }
|
|
27
|
+
</style>
|
|
28
|
+
</head>
|
|
29
|
+
<body>
|
|
30
|
+
<h1>search-posts-widget standalone test</h1>
|
|
31
|
+
|
|
32
|
+
<p>
|
|
33
|
+
Bundle:
|
|
34
|
+
<select id="bundle-version">
|
|
35
|
+
<option value="1.0.181">1.0.181</option>
|
|
36
|
+
<option value="1.0.188" selected>1.0.188</option>
|
|
37
|
+
</select>
|
|
38
|
+
<button id="reload">Reload bundle</button>
|
|
39
|
+
</p>
|
|
40
|
+
|
|
41
|
+
<p>
|
|
42
|
+
<strong>apiurl:</strong>
|
|
43
|
+
<input id="apiurl" style="width: 360px" value="http://172.22.0.15:8080" />
|
|
44
|
+
<br />
|
|
45
|
+
<strong>environment:</strong>
|
|
46
|
+
<input id="environment" value="dev" />
|
|
47
|
+
<br />
|
|
48
|
+
<strong>id (causationid):</strong>
|
|
49
|
+
<input id="causationid" value="test-1" />
|
|
50
|
+
<br />
|
|
51
|
+
<strong>searchurl:</strong>
|
|
52
|
+
<input id="searchurl" style="width: 360px" value="" />
|
|
53
|
+
</p>
|
|
54
|
+
|
|
55
|
+
<button id="open-selector">Open selector</button>
|
|
56
|
+
<button id="open-non-selector">Open non-selector</button>
|
|
57
|
+
|
|
58
|
+
<dialog id="dialog">
|
|
59
|
+
<search-posts-widget
|
|
60
|
+
id="widget"
|
|
61
|
+
selector="true"
|
|
62
|
+
environment="dev"
|
|
63
|
+
id="causationid"
|
|
64
|
+
apiurl="http://172.22.0.15:8080"
|
|
65
|
+
searchurl=""
|
|
66
|
+
></search-posts-widget>
|
|
67
|
+
</dialog>
|
|
68
|
+
|
|
69
|
+
<h3>Console log</h3>
|
|
70
|
+
<div id="log"></div>
|
|
71
|
+
|
|
72
|
+
<script>
|
|
73
|
+
const log = (msg, data) => {
|
|
74
|
+
const el = document.getElementById('log')
|
|
75
|
+
const line = document.createElement('div')
|
|
76
|
+
line.textContent = `[${new Date().toISOString()}] ${msg}` +
|
|
77
|
+
(data !== undefined ? ' ' + JSON.stringify(data) : '')
|
|
78
|
+
el.appendChild(line)
|
|
79
|
+
console.log(msg, data ?? '')
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
window.addEventListener('error', (e) => log('ERROR', { msg: e.message, file: e.filename, line: e.lineno }))
|
|
83
|
+
window.addEventListener('unhandledrejection', (e) => log('UNHANDLED REJECTION', { reason: String(e.reason) }))
|
|
84
|
+
|
|
85
|
+
const widgetScriptId = 'search-posts-widget-script'
|
|
86
|
+
const CDN_BASE = 'https://cdn.hvg.hu/search-posts-widget'
|
|
87
|
+
|
|
88
|
+
function loadBundle(version) {
|
|
89
|
+
return new Promise((resolve, reject) => {
|
|
90
|
+
const existing = document.getElementById(widgetScriptId)
|
|
91
|
+
if (existing) existing.remove()
|
|
92
|
+
if (customElements.get('search-posts-widget')) {
|
|
93
|
+
// Force re-registration by re-defining on a new class
|
|
94
|
+
// (customElements.define cannot be called twice for the same name,
|
|
95
|
+
// but since the script reassigns via const, we just reload.)
|
|
96
|
+
}
|
|
97
|
+
const s = document.createElement('script')
|
|
98
|
+
s.id = widgetScriptId
|
|
99
|
+
//s.src = `${CDN_BASE}/${version}/search-posts-widget.umd.js`
|
|
100
|
+
s.src = '/widget/dist/search-posts-widget.umd.js'
|
|
101
|
+
s.onload = () => resolve(version)
|
|
102
|
+
s.onerror = () => reject(new Error(`Failed to load ${version}`))
|
|
103
|
+
document.head.appendChild(s)
|
|
104
|
+
})
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
function applyAttrs() {
|
|
108
|
+
const w = document.getElementById('widget')
|
|
109
|
+
w.setAttribute('apiurl', document.getElementById('apiurl').value)
|
|
110
|
+
w.setAttribute('environment', document.getElementById('environment').value)
|
|
111
|
+
w.setAttribute('id', document.getElementById('causationid').value)
|
|
112
|
+
w.setAttribute('searchurl', document.getElementById('searchurl').value)
|
|
113
|
+
log('widget attrs', {
|
|
114
|
+
apiurl: w.getAttribute('apiurl'),
|
|
115
|
+
environment: w.getAttribute('environment'),
|
|
116
|
+
id: w.getAttribute('id'),
|
|
117
|
+
searchurl: w.getAttribute('searchurl'),
|
|
118
|
+
selector: w.getAttribute('selector'),
|
|
119
|
+
})
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
function openWidget(selector) {
|
|
123
|
+
const w = document.getElementById('widget')
|
|
124
|
+
w.setAttribute('selector', selector ? 'true' : 'false')
|
|
125
|
+
applyAttrs()
|
|
126
|
+
// Re-create the element so the new selector prop takes effect
|
|
127
|
+
const fresh = w.cloneNode(true)
|
|
128
|
+
w.replaceWith(fresh)
|
|
129
|
+
document.getElementById('dialog').showModal()
|
|
130
|
+
// v1.0.188 needs open() to display selector content
|
|
131
|
+
try {
|
|
132
|
+
console.log('fresh element before open:', fresh)
|
|
133
|
+
fresh.open?.()
|
|
134
|
+
log('called open()', { hasOpen: typeof fresh.open === 'function' })
|
|
135
|
+
} catch (e) {
|
|
136
|
+
log('open() threw', { error: String(e) })
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
document.getElementById('reload').addEventListener('click', async () => {
|
|
141
|
+
const v = document.getElementById('bundle-version').value
|
|
142
|
+
try {
|
|
143
|
+
await loadBundle(v)
|
|
144
|
+
log('bundle loaded', { version: v, defined: !!customElements.get('search-posts-widget') })
|
|
145
|
+
} catch (e) {
|
|
146
|
+
log('bundle load failed', { error: String(e) })
|
|
147
|
+
}
|
|
148
|
+
})
|
|
149
|
+
|
|
150
|
+
document.getElementById('open-selector').addEventListener('click', () => openWidget(true))
|
|
151
|
+
document.getElementById('open-non-selector').addEventListener('click', () => openWidget(false))
|
|
152
|
+
|
|
153
|
+
window.addEventListener('search_posts_selected', (e) => {
|
|
154
|
+
log('search_posts_selected', e.detail)
|
|
155
|
+
})
|
|
156
|
+
|
|
157
|
+
// Initial load of selected version
|
|
158
|
+
loadBundle(document.getElementById('bundle-version').value)
|
|
159
|
+
.then((v) => log('initial bundle loaded', { version: v, defined: !!customElements.get('search-posts-widget') }))
|
|
160
|
+
.catch((e) => log('initial bundle failed', { error: String(e) }))
|
|
161
|
+
</script>
|
|
162
|
+
</body>
|
|
163
|
+
</html>
|