@conduction/nextcloud-vue 2.111.0 → 2.113.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.
- package/dist/esm/components/CnActionButtons/CnActionButtons.vue.js +1 -1
- package/dist/esm/components/CnActionButtons/CnActionButtons.vue2.js +4 -6
- package/dist/esm/components/CnActionButtons/CnActionButtons.vue2.js.map +1 -1
- package/dist/esm/components/CnActionButtons/CnActionButtons.vue3.js.map +1 -1
- package/dist/esm/components/CnActionDialog/CnActionDialog.vue.js +1 -1
- package/dist/esm/components/CnActionDialog/CnActionDialog.vue2.js +3 -2
- package/dist/esm/components/CnActionDialog/CnActionDialog.vue2.js.map +1 -1
- package/dist/esm/components/CnActionDialog/CnActionDialog.vue3.js +4 -2
- package/dist/esm/components/CnActionDialog/CnActionDialog.vue3.js.map +1 -1
- package/dist/esm/components/CnAssignDialog/CnAssignDialog.vue.js +1 -1
- package/dist/esm/components/CnAssignDialog/CnAssignDialog.vue2.js +3 -2
- package/dist/esm/components/CnAssignDialog/CnAssignDialog.vue2.js.map +1 -1
- package/dist/esm/components/CnAssignDialog/CnAssignDialog.vue3.js +2 -1
- package/dist/esm/components/CnAssignDialog/CnAssignDialog.vue3.js.map +1 -1
- package/dist/esm/components/CnBoardView/CnBoardView.vue.js +1 -1
- package/dist/esm/components/CnBoardView/CnBoardView.vue2.js +54 -5
- package/dist/esm/components/CnBoardView/CnBoardView.vue2.js.map +1 -1
- package/dist/esm/components/CnBoardView/CnBoardView.vue3.js +16 -2
- package/dist/esm/components/CnBoardView/CnBoardView.vue3.js.map +1 -1
- package/dist/esm/components/CnCardGrid/CnCardGrid.vue.js +1 -1
- package/dist/esm/components/CnCardGrid/CnCardGrid.vue2.js +10 -0
- package/dist/esm/components/CnCardGrid/CnCardGrid.vue2.js.map +1 -1
- package/dist/esm/components/CnCardGrid/CnCardGrid.vue3.js +2 -1
- package/dist/esm/components/CnCardGrid/CnCardGrid.vue3.js.map +1 -1
- package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue.js +1 -1
- package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue2.js +22 -2
- package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue2.js.map +1 -1
- package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue3.js +17 -3
- package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue3.js.map +1 -1
- package/dist/esm/components/CnChartWidget/CnChartWidget.vue.js +1 -1
- package/dist/esm/components/CnChartWidget/CnChartWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnChartWidget/CnChartWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnChoiceCards/CnChoiceCards.vue.js +1 -1
- package/dist/esm/components/CnChoiceCards/CnChoiceCards.vue2.js.map +1 -1
- package/dist/esm/components/CnChoiceCards/CnChoiceCards.vue3.js.map +1 -1
- package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue.js +1 -1
- package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js +18 -3
- package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js.map +1 -1
- package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js +2 -2
- package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js.map +1 -1
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js +52 -13
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js.map +1 -1
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js +31 -3
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js.map +1 -1
- package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue.js +1 -1
- package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue2.js +48 -11
- package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue2.js.map +1 -1
- package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue3.js +160 -97
- package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue3.js.map +1 -1
- package/dist/esm/components/CnFormDialog/CnFormDialog.vue.js +1 -1
- package/dist/esm/components/CnFormDialog/CnFormDialog.vue2.js.map +1 -1
- package/dist/esm/components/CnFormDialog/CnFormDialog.vue3.js +2 -2
- package/dist/esm/components/CnFormDialog/CnFormDialog.vue3.js.map +1 -1
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js +222 -15
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js.map +1 -1
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js +24 -7
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js.map +1 -1
- package/dist/esm/components/CnNcDashboardList/CnNcDashboardList.vue.js +1 -1
- package/dist/esm/components/CnNcDashboardList/CnNcDashboardList.vue2.js +21 -1
- package/dist/esm/components/CnNcDashboardList/CnNcDashboardList.vue2.js.map +1 -1
- package/dist/esm/components/CnNcDashboardList/CnNcDashboardList.vue3.js.map +1 -1
- package/dist/esm/components/CnObjectCard/CnObjectCard.vue.js +1 -1
- package/dist/esm/components/CnObjectCard/CnObjectCard.vue2.js +36 -2
- package/dist/esm/components/CnObjectCard/CnObjectCard.vue2.js.map +1 -1
- package/dist/esm/components/CnObjectCard/CnObjectCard.vue3.js +44 -5
- package/dist/esm/components/CnObjectCard/CnObjectCard.vue3.js.map +1 -1
- package/dist/esm/components/CnPartyPicker/CnPartyPicker.vue.js +1 -0
- package/dist/esm/components/CnPartyPicker/CnPartyPicker.vue.js.map +1 -1
- package/dist/esm/components/CnPartyPicker/CnPartyPicker.vue2.js +22 -2
- package/dist/esm/components/CnPartyPicker/CnPartyPicker.vue2.js.map +1 -1
- package/dist/esm/components/CnPartyPicker/CnPartyPicker.vue3.js +36 -16
- package/dist/esm/components/CnPartyPicker/CnPartyPicker.vue3.js.map +1 -1
- package/dist/esm/components/CnReportsPage/CnReportsPage.vue.js +1 -1
- package/dist/esm/components/CnReportsPage/CnReportsPage.vue2.js +29 -12
- package/dist/esm/components/CnReportsPage/CnReportsPage.vue2.js.map +1 -1
- package/dist/esm/components/CnReportsPage/CnReportsPage.vue3.js +3 -1
- package/dist/esm/components/CnReportsPage/CnReportsPage.vue3.js.map +1 -1
- package/dist/esm/components/CnSearchSelect/CnSearchSelect.vue.js +1 -1
- package/dist/esm/components/CnSearchSelect/CnSearchSelect.vue2.js.map +1 -1
- package/dist/esm/components/CnSearchSelect/CnSearchSelect.vue3.js.map +1 -1
- package/dist/esm/composables/useRefLabels.js +26 -6
- package/dist/esm/composables/useRefLabels.js.map +1 -1
- package/dist/esm/integrations/registry.js +4 -0
- package/dist/esm/integrations/registry.js.map +1 -1
- package/dist/esm/l10n/en.json.js +3 -1
- package/dist/esm/l10n/en.json.js.map +1 -1
- package/dist/esm/l10n/nl.json.js +3 -1
- package/dist/esm/l10n/nl.json.js.map +1 -1
- package/dist/esm/library-style.js +1 -1
- package/dist/esm/nextcloud-vue.css +680 -449
- package/dist/esm/store/plugins/liveUpdates.js +3 -1
- package/dist/esm/store/plugins/liveUpdates.js.map +1 -1
- package/dist/esm/store/plugins/logs.js +2 -1
- package/dist/esm/store/plugins/logs.js.map +1 -1
- package/dist/esm/utils/actionLink.js +104 -1
- package/dist/esm/utils/actionLink.js.map +1 -1
- package/dist/esm/utils/detailActionModel.js +28 -1
- package/dist/esm/utils/detailActionModel.js.map +1 -1
- package/dist/esm/utils/fillTemplate.js +13 -5
- package/dist/esm/utils/fillTemplate.js.map +1 -1
- package/dist/esm/utils/headerFieldChips.js +21 -2
- package/dist/esm/utils/headerFieldChips.js.map +1 -1
- package/dist/esm/utils/mapList.js +26 -11
- package/dist/esm/utils/mapList.js.map +1 -1
- package/dist/esm/utils/savedViewMenu.js +12 -5
- package/dist/esm/utils/savedViewMenu.js.map +1 -1
- package/dist/esm/utils/validateManifestV2.compiled.js +3 -3
- package/dist/esm/utils/validateManifestV2.compiled.js.map +1 -1
- package/dist/nextcloud-vue.cjs.js +2800 -1933
- package/dist/nextcloud-vue.cjs.js.map +2 -2
- package/dist/nextcloud-vue.css +680 -449
- package/l10n/en.json +3 -1
- package/l10n/nl.json +3 -1
- package/package.json +1 -1
- package/src/components/CnActionButtons/CnActionButtons.vue +4 -6
- package/src/components/CnActionDialog/CnActionDialog.vue +32 -9
- package/src/components/CnAssignDialog/CnAssignDialog.vue +4 -2
- package/src/components/CnBoardView/CnBoardView.vue +58 -5
- package/src/components/CnCardGrid/CnCardGrid.md +1 -0
- package/src/components/CnCardGrid/CnCardGrid.vue +11 -0
- package/src/components/CnCellRenderer/CnCellRenderer.vue +27 -3
- package/src/components/CnChartWidget/CnChartWidget.vue +6 -0
- package/src/components/CnChoiceCards/CnChoiceCards.vue +0 -3
- package/src/components/CnDashboardPage/CnDashboardPage.vue +20 -5
- package/src/components/CnDetailPage/CnDetailPage.vue +62 -14
- package/src/components/CnDetailWidgetHost/CnDetailWidgetHost.vue +100 -5
- package/src/components/CnFormDialog/CnFormDialog.vue +1 -1
- package/src/components/CnIndexPage/CnIndexPage.vue +233 -18
- package/src/components/CnNcDashboardList/CnNcDashboardList.vue +21 -1
- package/src/components/CnObjectCard/CnObjectCard.md +1 -0
- package/src/components/CnObjectCard/CnObjectCard.vue +51 -5
- package/src/components/CnPartyPicker/CnPartyPicker.vue +62 -16
- package/src/components/CnReportsPage/CnReportsPage.vue +31 -12
- package/src/components/CnSearchSelect/CnSearchSelect.vue +8 -0
- package/src/composables/useRefLabels.js +25 -5
- package/src/css/badge.css +15 -13
- package/src/css/board.css +0 -1
- package/src/css/dialog.css +53 -3
- package/src/css/index-page.css +26 -1
- package/src/css/look-board-detail.css +36 -15
- package/src/css/look-board-index.css +67 -15
- package/src/css/look-board.css +32 -18
- package/src/integrations/registry.js +4 -0
- package/src/schemas/app-manifest-v2.schema.json +61 -13
- package/src/store/plugins/liveUpdates.js +3 -1
- package/src/store/plugins/logs.js +2 -1
- package/src/utils/actionLink.js +103 -0
- package/src/utils/detailActionModel.js +27 -0
- package/src/utils/fillTemplate.js +13 -5
- package/src/utils/headerFieldChips.js +21 -2
- package/src/utils/mapList.js +26 -11
- package/src/utils/savedViewMenu.js +12 -5
- package/src/utils/validateManifestV2.compiled.js +3 -3
|
@@ -44,10 +44,11 @@ import { useObjectSubscription } from '../../composables/useObjectSubscription.j
|
|
|
44
44
|
import { createRefLabelResolver } from '../../composables/useRefLabels.js';
|
|
45
45
|
import { gridLayout } from '../../mixins/gridLayout.js';
|
|
46
46
|
import { pageViews } from '../../mixins/pageViews.js';
|
|
47
|
+
import { headerActionAsLink } from '../../utils/actionLink.js';
|
|
47
48
|
import { isAppInstalled } from '../../utils/appInstalled.js';
|
|
48
49
|
import { compactLayoutRows } from '../../utils/dashboardPlacement.js';
|
|
49
50
|
import { defaultDetailGrid } from '../../utils/defaultDetailGrid.js';
|
|
50
|
-
import { stageOf, normalisePinnedAction, stageEntry, MAX_QUICK_ACTIONS, groupMenuEntries, resolveNextStep, pillCountSource, resolveCountPill, resolvePill } from '../../utils/detailActionModel.js';
|
|
51
|
+
import { stageOf, normalisePinnedAction, stageEntry, MAX_QUICK_ACTIONS, groupMenuEntries, resolveNextStep, pillCountSource, resolveCountPill, resolvePill, pillLook } from '../../utils/detailActionModel.js';
|
|
51
52
|
import { visibilityContextRefs, widgetConditionData, fetchVisibilityRows, detailWidgetVisible } from '../../utils/detailWidgetVisibility.js';
|
|
52
53
|
import { reportBindingProblems } from '../../utils/diagnostics.js';
|
|
53
54
|
import { fetchListTotal } from '../../utils/fetchFilterCounts.js';
|
|
@@ -986,6 +987,11 @@ var script = {
|
|
|
986
987
|
* `@objectId` / `@object.<field>` token + local-predicate resolution.
|
|
987
988
|
* Empty (the default) renders nothing.
|
|
988
989
|
*
|
|
990
|
+
* An entry with `href` is a link, never dispatched: an absolute
|
|
991
|
+
* `http(s)`, `mailto:`, `tel:` or `//host/...` URL as written, or an instance path
|
|
992
|
+
* (leading `/`) through `generateUrl()`, opening in place unless
|
|
993
|
+
* `target` is `'_blank'`.
|
|
994
|
+
*
|
|
989
995
|
* The menu, not a row of buttons: that is what the manifest schema has
|
|
990
996
|
* always said this key is, and what CnIndexPage already does with it.
|
|
991
997
|
* The two surfaces had drifted, and on a dossiq case — twelve actions —
|
|
@@ -1273,9 +1279,12 @@ var script = {
|
|
|
1273
1279
|
* `field`: `text`, a constant ("Inwoner"), or `countFrom`
|
|
1274
1280
|
* (`{ register, schema, filter? }`) with `countLabel` (`{ one, other }`
|
|
1275
1281
|
* with `{count}`), a count of a related list ("1 lopende zaak") that
|
|
1276
|
-
* shows nothing at 0.
|
|
1282
|
+
* shows nothing at 0. With `resolve: { register, schema, labelField?,
|
|
1283
|
+
* colorField?, iconField? }` the pill shows the referenced record's
|
|
1284
|
+
* label, takes its tone from that record's colour (an NL Design System
|
|
1285
|
+
* hue such as `red`, or a badge role) and shows its icon.
|
|
1277
1286
|
*
|
|
1278
|
-
* @type {{field?: string, text?: string, countFrom?: object, countLabel?: object, colorMap?: object, labels?: object, variant?: string}|null}
|
|
1287
|
+
* @type {{field?: string, text?: string, countFrom?: object, countLabel?: object, colorMap?: object, labels?: object, variant?: string, resolve?: object}|null}
|
|
1279
1288
|
*/
|
|
1280
1289
|
typePill: {
|
|
1281
1290
|
type: Object,
|
|
@@ -1716,6 +1725,8 @@ var script = {
|
|
|
1716
1725
|
pillCountSeq: 0,
|
|
1717
1726
|
/** The labels of the records pills with `resolve` point at, by pill key. */
|
|
1718
1727
|
pillRefLabels: {},
|
|
1728
|
+
/** The colour and icon names read off the records pills with `resolve` point at, by pill key. */
|
|
1729
|
+
pillRefLooks: {},
|
|
1719
1730
|
/** Sequence of the last pill label lookup, so a late answer for another record is dropped. */
|
|
1720
1731
|
pillRefSeq: 0,
|
|
1721
1732
|
/** `register/schema/id` the read-state call was last made for, so it is sent once per load. */
|
|
@@ -2264,10 +2275,11 @@ var script = {
|
|
|
2264
2275
|
// `resolve`: the referenced record's label replaces the id, and
|
|
2265
2276
|
// keys the colour too ("Woo-verzoek", not a uuid).
|
|
2266
2277
|
const resolved = this.pillRefLabels[key];
|
|
2278
|
+
const look = pillLook(this.pillRefLooks[key]);
|
|
2267
2279
|
if (typeof resolved === 'string' && resolved !== '') {
|
|
2268
|
-
return { ...pill, key, label: this.effectiveTranslate(resolved), colorKey: resolved }
|
|
2280
|
+
return { ...pill, ...look, key, label: this.effectiveTranslate(resolved), colorKey: resolved }
|
|
2269
2281
|
}
|
|
2270
|
-
return { ...pill, key, label: this.effectiveTranslate(pill.label) }
|
|
2282
|
+
return { ...pill, ...look, key, label: this.effectiveTranslate(pill.label) }
|
|
2271
2283
|
})
|
|
2272
2284
|
.filter(Boolean)
|
|
2273
2285
|
},
|
|
@@ -2302,7 +2314,8 @@ var script = {
|
|
|
2302
2314
|
.filter(([, config]) => config && config.resolve && config.resolve.register && config.resolve.schema && typeof config.field === 'string')
|
|
2303
2315
|
.map(([key, config]) => {
|
|
2304
2316
|
const pill = resolvePill({ field: config.field }, this.resolvedObject);
|
|
2305
|
-
|
|
2317
|
+
const { register, schema, labelField, colorField, iconField } = config.resolve;
|
|
2318
|
+
return pill ? [key, register, schema, labelField || '', pill.colorKey, colorField || '', iconField || ''] : null
|
|
2306
2319
|
})
|
|
2307
2320
|
.filter(Boolean)
|
|
2308
2321
|
},
|
|
@@ -2701,6 +2714,7 @@ var script = {
|
|
|
2701
2714
|
* in. Edit goes LAST so it reads after the app's own actions in the
|
|
2702
2715
|
* Actions menu — the page's affordance yields to the app's.
|
|
2703
2716
|
*
|
|
2717
|
+
* @spec openspec/changes/header-action-href/specs/header-action-href/spec.md#requirement-a-header-action-with-href-is-a-link-that-runs-and-emits-nothing
|
|
2704
2718
|
* @return {Array<object>} The action descriptors.
|
|
2705
2719
|
*/
|
|
2706
2720
|
effectiveHeaderActions() {
|
|
@@ -2709,12 +2723,16 @@ var script = {
|
|
|
2709
2723
|
// written out in place) join the list CnActionButtons dispatches,
|
|
2710
2724
|
// so they get the same dialogs, toasts and `visibleWhen` gating as
|
|
2711
2725
|
// any header action. An id that is already declared is not added
|
|
2712
|
-
// twice. With nothing pinned inline
|
|
2726
|
+
// twice. With nothing pinned inline and no `href` entry this is
|
|
2727
|
+
// `headerActions` itself.
|
|
2713
2728
|
const known = new Set(authored.map((action) => action && action.id));
|
|
2714
2729
|
const inline = [this.stagePrimary, ...this.pinnedQuickActions]
|
|
2715
2730
|
.filter((pinned) => pinned && pinned.inline && !known.has(pinned.id))
|
|
2716
2731
|
.map((pinned) => pinned.inline);
|
|
2717
|
-
const
|
|
2732
|
+
const combined = inline.length > 0 ? [...authored, ...inline] : authored;
|
|
2733
|
+
// An entry (or child) with `href` becomes a link CnActionButtons renders as an anchor.
|
|
2734
|
+
const linked = combined.map(headerActionAsLink);
|
|
2735
|
+
const declared = linked.some((action, index) => action !== combined[index]) ? linked : combined;
|
|
2718
2736
|
if (!(this.foldsEditIntoActions && this.canEditRecord)) {
|
|
2719
2737
|
return declared
|
|
2720
2738
|
}
|
|
@@ -3958,12 +3976,13 @@ var script = {
|
|
|
3958
3976
|
*
|
|
3959
3977
|
* A stage's action is dispatched the way a header action is, through
|
|
3960
3978
|
* the `run()` CnActionButtons bound for it, and announced to the host
|
|
3961
|
-
* with its declaration. A link action is left to the browser
|
|
3962
|
-
* a stage action this is the page's
|
|
3963
|
-
* before.
|
|
3979
|
+
* with its declaration. A link action is left to the browser and
|
|
3980
|
+
* announces nothing. Without a stage action this is the page's
|
|
3981
|
+
* `primaryAction`, announced as before.
|
|
3964
3982
|
*
|
|
3965
3983
|
* @return {void}
|
|
3966
3984
|
* @spec openspec/changes/detail-action-model-and-case-surfaces/specs/detail-action-model/spec.md#requirement-primary-action-follows-the-stage
|
|
3985
|
+
* @spec openspec/changes/header-action-href/specs/header-action-href/spec.md#requirement-a-header-action-with-href-is-a-link-that-runs-and-emits-nothing
|
|
3967
3986
|
*/
|
|
3968
3987
|
onPrimaryActionClick() {
|
|
3969
3988
|
const entry = this.stagePrimaryEntry;
|
|
@@ -3971,6 +3990,9 @@ var script = {
|
|
|
3971
3990
|
this.$emit('primary-action', this.primaryAction);
|
|
3972
3991
|
return
|
|
3973
3992
|
}
|
|
3993
|
+
if (entry.href) {
|
|
3994
|
+
return
|
|
3995
|
+
}
|
|
3974
3996
|
this.$emit('primary-action', this.headerActionsById[entry.id] || { id: entry.id, label: entry.label });
|
|
3975
3997
|
this.onPinnedActionClick(entry);
|
|
3976
3998
|
},
|
|
@@ -4116,6 +4138,7 @@ var script = {
|
|
|
4116
4138
|
const seq = ++this.pillRefSeq;
|
|
4117
4139
|
if (targets.length === 0) {
|
|
4118
4140
|
this.pillRefLabels = {};
|
|
4141
|
+
this.pillRefLooks = {};
|
|
4119
4142
|
return
|
|
4120
4143
|
}
|
|
4121
4144
|
if (!this._pillRefResolver) {
|
|
@@ -4128,14 +4151,30 @@ var script = {
|
|
|
4128
4151
|
});
|
|
4129
4152
|
}
|
|
4130
4153
|
const labels = {};
|
|
4131
|
-
|
|
4132
|
-
|
|
4154
|
+
const looks = {};
|
|
4155
|
+
const field = async (register, schema, id, name) => {
|
|
4156
|
+
if (!name) {
|
|
4157
|
+
return null
|
|
4158
|
+
}
|
|
4159
|
+
const found = await this._pillRefResolver.resolve(register, schema, [id], name, { strict: true }).catch(() => ({}));
|
|
4160
|
+
return found && typeof found[id] === 'string' ? found[id] : null
|
|
4161
|
+
};
|
|
4162
|
+
await Promise.all(targets.map(async ([key, register, schema, labelField, id, colorField, iconField]) => {
|
|
4163
|
+
const [found, color, icon] = await Promise.all([
|
|
4164
|
+
this._pillRefResolver.resolve(register, schema, [id], labelField).catch(() => ({})),
|
|
4165
|
+
field(register, schema, id, colorField),
|
|
4166
|
+
field(register, schema, id, iconField),
|
|
4167
|
+
]);
|
|
4133
4168
|
if (found && typeof found[id] === 'string') {
|
|
4134
4169
|
labels[key] = found[id];
|
|
4135
4170
|
}
|
|
4171
|
+
if (color || icon) {
|
|
4172
|
+
looks[key] = { color, icon };
|
|
4173
|
+
}
|
|
4136
4174
|
}));
|
|
4137
4175
|
if (seq === this.pillRefSeq) {
|
|
4138
4176
|
this.pillRefLabels = labels;
|
|
4177
|
+
this.pillRefLooks = looks;
|
|
4139
4178
|
}
|
|
4140
4179
|
},
|
|
4141
4180
|
|