@api-client/ui 0.6.7 → 0.6.9
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/build/src/modeling/dialogs/CountryTaxonomy.d.ts +24 -0
- package/build/src/modeling/dialogs/CountryTaxonomy.d.ts.map +1 -0
- package/build/src/modeling/dialogs/CountryTaxonomy.js +174 -0
- package/build/src/modeling/dialogs/CountryTaxonomy.js.map +1 -0
- package/build/src/modeling/dialogs/PostalCodeTaxonomy.d.ts +24 -0
- package/build/src/modeling/dialogs/PostalCodeTaxonomy.d.ts.map +1 -0
- package/build/src/modeling/dialogs/PostalCodeTaxonomy.js +167 -0
- package/build/src/modeling/dialogs/PostalCodeTaxonomy.js.map +1 -0
- package/build/src/modeling/internals/DomainAutoFieldsDialog.d.ts.map +1 -1
- package/build/src/modeling/internals/DomainAutoFieldsDialog.js +41 -16
- package/build/src/modeling/internals/DomainAutoFieldsDialog.js.map +1 -1
- package/build/src/modeling/internals/DomainPropertyEditor.d.ts.map +1 -1
- package/build/src/modeling/internals/DomainPropertyEditor.js +8 -0
- package/build/src/modeling/internals/DomainPropertyEditor.js.map +1 -1
- package/build/src/modeling/internals/DomainTemplateBrowser.d.ts +10 -6
- package/build/src/modeling/internals/DomainTemplateBrowser.d.ts.map +1 -1
- package/build/src/modeling/internals/DomainTemplateBrowser.js +50 -7
- package/build/src/modeling/internals/DomainTemplateBrowser.js.map +1 -1
- package/build/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -1
- package/src/modeling/dialogs/CountryTaxonomy.ts +176 -0
- package/src/modeling/dialogs/PostalCodeTaxonomy.ts +169 -0
- package/src/modeling/internals/DomainAutoFieldsDialog.ts +41 -16
- package/src/modeling/internals/DomainPropertyEditor.ts +6 -0
- package/src/modeling/internals/DomainTemplateBrowser.ts +61 -17
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { DomainProperty } from '@api-client/core/modeling/DomainProperty.js';
|
|
2
|
+
import { type CountryConfig } from '@api-client/core/modeling/definitions/Country.js';
|
|
3
|
+
import { TemplateResult } from 'lit';
|
|
4
|
+
import { TaxonomyDialog } from './TaxonomyDialog.js';
|
|
5
|
+
import '../../md/chip/ui-chip-set.js';
|
|
6
|
+
import '../../md/chip/ui-chip.js';
|
|
7
|
+
/**
|
|
8
|
+
* A class that generates a dialog that allows the user to configure the taxonomy of a Country annotated association.
|
|
9
|
+
*/
|
|
10
|
+
export declare class CountryTaxonomy extends TaxonomyDialog<CountryConfig> {
|
|
11
|
+
domainElement: DomainProperty;
|
|
12
|
+
static title: string;
|
|
13
|
+
constructor(domainElement: DomainProperty);
|
|
14
|
+
protected formCallback(event: Event): Promise<void>;
|
|
15
|
+
protected handleAllowedCountriesChange(event: Event): void;
|
|
16
|
+
protected handleRemoveAllowedCountry(event: Event): void;
|
|
17
|
+
protected handleDisallowedCountriesChange(event: Event): void;
|
|
18
|
+
protected handleRemoveDisallowedCountry(event: Event): void;
|
|
19
|
+
render(): TemplateResult;
|
|
20
|
+
protected renderFormatSelect(): TemplateResult;
|
|
21
|
+
protected renderAllowedCountries(): TemplateResult;
|
|
22
|
+
protected renderDisallowedCountries(): TemplateResult;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=CountryTaxonomy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CountryTaxonomy.d.ts","sourceRoot":"","sources":["../../../../src/modeling/dialogs/CountryTaxonomy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6CAA6C,CAAA;AACjF,OAAO,EAAE,KAAK,aAAa,EAA0B,MAAM,kDAAkD,CAAA;AAE7G,OAAO,EAAQ,cAAc,EAAE,MAAM,KAAK,CAAA;AAG1C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAEpD,OAAO,8BAA8B,CAAA;AACrC,OAAO,0BAA0B,CAAA;AAEjC;;GAEG;AACH,qBAAa,eAAgB,SAAQ,cAAc,CAAC,aAAa,CAAC;IAG7C,aAAa,EAAE,cAAc;IAFhD,OAAgB,KAAK,SAA+B;gBAEjC,aAAa,EAAE,cAAc;cAW7B,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;IAc5D,SAAS,CAAC,4BAA4B,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAc1D,SAAS,CAAC,0BAA0B,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IASxD,SAAS,CAAC,+BAA+B,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAc7D,SAAS,CAAC,6BAA6B,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAU3D,MAAM,IAAI,cAAc;IAQxB,SAAS,CAAC,kBAAkB,IAAI,cAAc;IA6B9C,SAAS,CAAC,sBAAsB,IAAI,cAAc;IAyBlD,SAAS,CAAC,yBAAyB,IAAI,cAAc;CAwBtD"}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import { __esDecorate, __runInitializers } from "tslib";
|
|
2
|
+
import { DEFAULT_COUNTRY_CONFIG } from '@api-client/core/modeling/definitions/Country.js';
|
|
3
|
+
import { bound } from '../../decorators/bound.js';
|
|
4
|
+
import { html } from 'lit';
|
|
5
|
+
import { SemanticType } from '@api-client/core/modeling/Semantics.js';
|
|
6
|
+
import { renderHelp } from '../../help/render.js';
|
|
7
|
+
import { TaxonomyDialog } from './TaxonomyDialog.js';
|
|
8
|
+
import '../../md/chip/ui-chip-set.js';
|
|
9
|
+
import '../../md/chip/ui-chip.js';
|
|
10
|
+
/**
|
|
11
|
+
* A class that generates a dialog that allows the user to configure the taxonomy of a Country annotated association.
|
|
12
|
+
*/
|
|
13
|
+
let CountryTaxonomy = (() => {
|
|
14
|
+
let _classSuper = TaxonomyDialog;
|
|
15
|
+
let _instanceExtraInitializers = [];
|
|
16
|
+
let _render_decorators;
|
|
17
|
+
return class CountryTaxonomy extends _classSuper {
|
|
18
|
+
static {
|
|
19
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
20
|
+
_render_decorators = [bound];
|
|
21
|
+
__esDecorate(this, null, _render_decorators, { kind: "method", name: "render", static: false, private: false, access: { has: obj => "render" in obj, get: obj => obj.render }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
22
|
+
if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
23
|
+
}
|
|
24
|
+
domainElement = __runInitializers(this, _instanceExtraInitializers);
|
|
25
|
+
static title = `Configure Country Taxonomy`;
|
|
26
|
+
constructor(domainElement) {
|
|
27
|
+
let config;
|
|
28
|
+
const semantic = domainElement.semantics.find((s) => s.id === SemanticType.Country);
|
|
29
|
+
if (semantic && semantic.config) {
|
|
30
|
+
config = structuredClone(semantic.config);
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
config = {};
|
|
34
|
+
}
|
|
35
|
+
super(config);
|
|
36
|
+
this.domainElement = domainElement;
|
|
37
|
+
}
|
|
38
|
+
formCallback(event) {
|
|
39
|
+
const semantic = this.domainElement.semantics.find((s) => s.id === SemanticType.Country);
|
|
40
|
+
if (semantic) {
|
|
41
|
+
semantic.config = this.config;
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
this.domainElement.semantics.push({
|
|
45
|
+
id: SemanticType.Country,
|
|
46
|
+
config: this.config,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
this.domainElement.domain.notifyChange();
|
|
50
|
+
return super.formCallback(event);
|
|
51
|
+
}
|
|
52
|
+
handleAllowedCountriesChange(event) {
|
|
53
|
+
const input = event.target;
|
|
54
|
+
const value = input.value.trim();
|
|
55
|
+
if (value) {
|
|
56
|
+
const countries = this.config?.allowedCountries ?? DEFAULT_COUNTRY_CONFIG.allowedCountries ?? [];
|
|
57
|
+
if (!countries.includes(value)) {
|
|
58
|
+
countries.push(value);
|
|
59
|
+
this.config = { ...this.config, allowedCountries: countries };
|
|
60
|
+
this.requestUpdate();
|
|
61
|
+
}
|
|
62
|
+
input.value = '';
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
handleRemoveAllowedCountry(event) {
|
|
66
|
+
const chip = event.currentTarget;
|
|
67
|
+
const index = parseInt(chip.dataset.index || '-1', 10);
|
|
68
|
+
if (index >= 0 && this.config?.allowedCountries) {
|
|
69
|
+
this.config.allowedCountries.splice(index, 1);
|
|
70
|
+
this.requestUpdate();
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
handleDisallowedCountriesChange(event) {
|
|
74
|
+
const input = event.target;
|
|
75
|
+
const value = input.value.trim();
|
|
76
|
+
if (value) {
|
|
77
|
+
const countries = this.config?.disallowedCountries ?? DEFAULT_COUNTRY_CONFIG.disallowedCountries ?? [];
|
|
78
|
+
if (!countries.includes(value)) {
|
|
79
|
+
countries.push(value);
|
|
80
|
+
this.config = { ...this.config, disallowedCountries: countries };
|
|
81
|
+
this.requestUpdate();
|
|
82
|
+
}
|
|
83
|
+
input.value = '';
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
handleRemoveDisallowedCountry(event) {
|
|
87
|
+
const chip = event.currentTarget;
|
|
88
|
+
const index = parseInt(chip.dataset.index || '-1', 10);
|
|
89
|
+
if (index >= 0 && this.config?.disallowedCountries) {
|
|
90
|
+
this.config.disallowedCountries.splice(index, 1);
|
|
91
|
+
this.requestUpdate();
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
render() {
|
|
95
|
+
return html `
|
|
96
|
+
<div class="input-group">
|
|
97
|
+
${this.renderFormatSelect()} ${this.renderAllowedCountries()} ${this.renderDisallowedCountries()}
|
|
98
|
+
</div>
|
|
99
|
+
`;
|
|
100
|
+
}
|
|
101
|
+
renderFormatSelect() {
|
|
102
|
+
const value = this.config?.format ?? DEFAULT_COUNTRY_CONFIG.format;
|
|
103
|
+
return html `
|
|
104
|
+
<div class="row">
|
|
105
|
+
<ui-select
|
|
106
|
+
label="Country format"
|
|
107
|
+
class="input"
|
|
108
|
+
name="format"
|
|
109
|
+
.value="${value}"
|
|
110
|
+
@change="${this.handleSelectChange}"
|
|
111
|
+
>
|
|
112
|
+
<ui-option value="ISO_3166_Alpha_2">
|
|
113
|
+
<div>ISO 3166 Alpha-2 (Recommended)</div>
|
|
114
|
+
<div slot="supporting-text">Store as ISO 3166 Alpha-2 (e.g., US)</div>
|
|
115
|
+
</ui-option>
|
|
116
|
+
<ui-option value="ISO_3166_Alpha_3">
|
|
117
|
+
<div>ISO 3166 Alpha-3</div>
|
|
118
|
+
<div slot="supporting-text">Store as ISO 3166 Alpha-3 (e.g., USA)</div>
|
|
119
|
+
</ui-option>
|
|
120
|
+
<ui-option value="Name">
|
|
121
|
+
<div>Name</div>
|
|
122
|
+
<div slot="supporting-text">Store as country name (e.g., United States)</div>
|
|
123
|
+
</ui-option>
|
|
124
|
+
</ui-select>
|
|
125
|
+
${renderHelp('taxonomy', 'country:format')}
|
|
126
|
+
</div>
|
|
127
|
+
`;
|
|
128
|
+
}
|
|
129
|
+
renderAllowedCountries() {
|
|
130
|
+
const value = this.config?.allowedCountries ?? DEFAULT_COUNTRY_CONFIG.allowedCountries;
|
|
131
|
+
const chips = (value || []).map((country, index) => html `<ui-chip type="input" removable data-index="${index}" @remove="${this.handleRemoveAllowedCountry}"
|
|
132
|
+
>${country}</ui-chip
|
|
133
|
+
>`);
|
|
134
|
+
return html `
|
|
135
|
+
<div class="row input-row">
|
|
136
|
+
<div class="input chips-input">
|
|
137
|
+
<ui-outlined-text-field
|
|
138
|
+
class="input"
|
|
139
|
+
name="allowedCountries"
|
|
140
|
+
label="Allowed Countries"
|
|
141
|
+
@change="${this.handleAllowedCountriesChange}"
|
|
142
|
+
supportingText="Add a country and press Enter to add it to the list. Use the selected format."
|
|
143
|
+
></ui-outlined-text-field>
|
|
144
|
+
<ui-chip-set>${chips}</ui-chip-set>
|
|
145
|
+
</div>
|
|
146
|
+
${renderHelp('taxonomy', 'country:allowedCountries')}
|
|
147
|
+
</div>
|
|
148
|
+
`;
|
|
149
|
+
}
|
|
150
|
+
renderDisallowedCountries() {
|
|
151
|
+
const value = this.config?.disallowedCountries ?? DEFAULT_COUNTRY_CONFIG.disallowedCountries;
|
|
152
|
+
const chips = (value || []).map((country, index) => html `<ui-chip type="input" removable data-index="${index}" @remove="${this.handleRemoveDisallowedCountry}"
|
|
153
|
+
>${country}</ui-chip
|
|
154
|
+
>`);
|
|
155
|
+
return html `
|
|
156
|
+
<div class="row input-row">
|
|
157
|
+
<div class="input chips-input">
|
|
158
|
+
<ui-outlined-text-field
|
|
159
|
+
class="input"
|
|
160
|
+
name="disallowedCountries"
|
|
161
|
+
label="Disallowed Countries"
|
|
162
|
+
@change="${this.handleDisallowedCountriesChange}"
|
|
163
|
+
supportingText="Add a country and press Enter to add it to the list. Use the selected format."
|
|
164
|
+
></ui-outlined-text-field>
|
|
165
|
+
<ui-chip-set>${chips}</ui-chip-set>
|
|
166
|
+
</div>
|
|
167
|
+
${renderHelp('taxonomy', 'country:disallowedCountries')}
|
|
168
|
+
</div>
|
|
169
|
+
`;
|
|
170
|
+
}
|
|
171
|
+
};
|
|
172
|
+
})();
|
|
173
|
+
export { CountryTaxonomy };
|
|
174
|
+
//# sourceMappingURL=CountryTaxonomy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CountryTaxonomy.js","sourceRoot":"","sources":["../../../../src/modeling/dialogs/CountryTaxonomy.ts"],"names":[],"mappings":"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","sourcesContent":["import type { DomainProperty } from '@api-client/core/modeling/DomainProperty.js'\nimport { type CountryConfig, DEFAULT_COUNTRY_CONFIG } from '@api-client/core/modeling/definitions/Country.js'\nimport { bound } from '../../decorators/bound.js'\nimport { html, TemplateResult } from 'lit'\nimport { SemanticType } from '@api-client/core/modeling/Semantics.js'\nimport { renderHelp } from '../../help/render.js'\nimport { TaxonomyDialog } from './TaxonomyDialog.js'\n\nimport '../../md/chip/ui-chip-set.js'\nimport '../../md/chip/ui-chip.js'\n\n/**\n * A class that generates a dialog that allows the user to configure the taxonomy of a Country annotated association.\n */\nexport class CountryTaxonomy extends TaxonomyDialog<CountryConfig> {\n static override title = `Configure Country Taxonomy`\n\n constructor(public domainElement: DomainProperty) {\n let config: CountryConfig\n const semantic = domainElement.semantics.find((s) => s.id === SemanticType.Country)\n if (semantic && semantic.config) {\n config = structuredClone(semantic.config)\n } else {\n config = {}\n }\n super(config)\n }\n\n protected override formCallback(event: Event): Promise<void> {\n const semantic = this.domainElement.semantics.find((s) => s.id === SemanticType.Country)\n if (semantic) {\n semantic.config = this.config\n } else {\n this.domainElement.semantics.push({\n id: SemanticType.Country,\n config: this.config,\n })\n }\n this.domainElement.domain.notifyChange()\n return super.formCallback(event)\n }\n\n protected handleAllowedCountriesChange(event: Event): void {\n const input = event.target as HTMLInputElement\n const value = input.value.trim()\n if (value) {\n const countries = this.config?.allowedCountries ?? DEFAULT_COUNTRY_CONFIG.allowedCountries ?? []\n if (!countries.includes(value)) {\n countries.push(value)\n this.config = { ...this.config, allowedCountries: countries }\n this.requestUpdate()\n }\n input.value = ''\n }\n }\n\n protected handleRemoveAllowedCountry(event: Event): void {\n const chip = event.currentTarget as HTMLElement\n const index = parseInt(chip.dataset.index || '-1', 10)\n if (index >= 0 && this.config?.allowedCountries) {\n this.config.allowedCountries.splice(index, 1)\n this.requestUpdate()\n }\n }\n\n protected handleDisallowedCountriesChange(event: Event): void {\n const input = event.target as HTMLInputElement\n const value = input.value.trim()\n if (value) {\n const countries = this.config?.disallowedCountries ?? DEFAULT_COUNTRY_CONFIG.disallowedCountries ?? []\n if (!countries.includes(value)) {\n countries.push(value)\n this.config = { ...this.config, disallowedCountries: countries }\n this.requestUpdate()\n }\n input.value = ''\n }\n }\n\n protected handleRemoveDisallowedCountry(event: Event): void {\n const chip = event.currentTarget as HTMLElement\n const index = parseInt(chip.dataset.index || '-1', 10)\n if (index >= 0 && this.config?.disallowedCountries) {\n this.config.disallowedCountries.splice(index, 1)\n this.requestUpdate()\n }\n }\n\n @bound\n render(): TemplateResult {\n return html`\n <div class=\"input-group\">\n ${this.renderFormatSelect()} ${this.renderAllowedCountries()} ${this.renderDisallowedCountries()}\n </div>\n `\n }\n\n protected renderFormatSelect(): TemplateResult {\n const value = this.config?.format ?? DEFAULT_COUNTRY_CONFIG.format\n return html`\n <div class=\"row\">\n <ui-select\n label=\"Country format\"\n class=\"input\"\n name=\"format\"\n .value=\"${value as string}\"\n @change=\"${this.handleSelectChange}\"\n >\n <ui-option value=\"ISO_3166_Alpha_2\">\n <div>ISO 3166 Alpha-2 (Recommended)</div>\n <div slot=\"supporting-text\">Store as ISO 3166 Alpha-2 (e.g., US)</div>\n </ui-option>\n <ui-option value=\"ISO_3166_Alpha_3\">\n <div>ISO 3166 Alpha-3</div>\n <div slot=\"supporting-text\">Store as ISO 3166 Alpha-3 (e.g., USA)</div>\n </ui-option>\n <ui-option value=\"Name\">\n <div>Name</div>\n <div slot=\"supporting-text\">Store as country name (e.g., United States)</div>\n </ui-option>\n </ui-select>\n ${renderHelp('taxonomy', 'country:format')}\n </div>\n `\n }\n\n protected renderAllowedCountries(): TemplateResult {\n const value = this.config?.allowedCountries ?? DEFAULT_COUNTRY_CONFIG.allowedCountries\n const chips = (value || []).map(\n (country, index) =>\n html`<ui-chip type=\"input\" removable data-index=\"${index}\" @remove=\"${this.handleRemoveAllowedCountry}\"\n >${country}</ui-chip\n >`\n )\n return html`\n <div class=\"row input-row\">\n <div class=\"input chips-input\">\n <ui-outlined-text-field\n class=\"input\"\n name=\"allowedCountries\"\n label=\"Allowed Countries\"\n @change=\"${this.handleAllowedCountriesChange}\"\n supportingText=\"Add a country and press Enter to add it to the list. Use the selected format.\"\n ></ui-outlined-text-field>\n <ui-chip-set>${chips}</ui-chip-set>\n </div>\n ${renderHelp('taxonomy', 'country:allowedCountries')}\n </div>\n `\n }\n\n protected renderDisallowedCountries(): TemplateResult {\n const value = this.config?.disallowedCountries ?? DEFAULT_COUNTRY_CONFIG.disallowedCountries\n const chips = (value || []).map(\n (country, index) =>\n html`<ui-chip type=\"input\" removable data-index=\"${index}\" @remove=\"${this.handleRemoveDisallowedCountry}\"\n >${country}</ui-chip\n >`\n )\n return html`\n <div class=\"row input-row\">\n <div class=\"input chips-input\">\n <ui-outlined-text-field\n class=\"input\"\n name=\"disallowedCountries\"\n label=\"Disallowed Countries\"\n @change=\"${this.handleDisallowedCountriesChange}\"\n supportingText=\"Add a country and press Enter to add it to the list. Use the selected format.\"\n ></ui-outlined-text-field>\n <ui-chip-set>${chips}</ui-chip-set>\n </div>\n ${renderHelp('taxonomy', 'country:disallowedCountries')}\n </div>\n `\n }\n}\n"]}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { DomainProperty } from '@api-client/core/modeling/DomainProperty.js';
|
|
2
|
+
import { type PostalCodeConfig } from '@api-client/core/modeling/definitions/PostalCode.js';
|
|
3
|
+
import { TemplateResult } from 'lit';
|
|
4
|
+
import { TaxonomyDialog } from './TaxonomyDialog.js';
|
|
5
|
+
import '../../md/chip/ui-chip-set.js';
|
|
6
|
+
import '../../md/chip/ui-chip.js';
|
|
7
|
+
/**
|
|
8
|
+
* A class that generates a dialog that allows the user to configure the taxonomy of a PostalCode annotated association.
|
|
9
|
+
*/
|
|
10
|
+
export declare class PostalCodeTaxonomy extends TaxonomyDialog<PostalCodeConfig> {
|
|
11
|
+
domainElement: DomainProperty;
|
|
12
|
+
static title: string;
|
|
13
|
+
constructor(domainElement: DomainProperty);
|
|
14
|
+
protected formCallback(event: Event): Promise<void>;
|
|
15
|
+
protected handleAllowedPostalCodesChange(event: Event): void;
|
|
16
|
+
protected handleRemovePostalCode(event: Event): void;
|
|
17
|
+
protected handleDisallowedPostalCodesChange(event: Event): void;
|
|
18
|
+
protected handleRemoveDisallowedPostalCode(event: Event): void;
|
|
19
|
+
render(): TemplateResult;
|
|
20
|
+
protected renderValidate(): TemplateResult;
|
|
21
|
+
protected renderAllowedPostalCodes(): TemplateResult;
|
|
22
|
+
protected renderDisallowedPostalCodes(): TemplateResult;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=PostalCodeTaxonomy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PostalCodeTaxonomy.d.ts","sourceRoot":"","sources":["../../../../src/modeling/dialogs/PostalCodeTaxonomy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6CAA6C,CAAA;AACjF,OAAO,EAAE,KAAK,gBAAgB,EAA8B,MAAM,qDAAqD,CAAA;AAEvH,OAAO,EAAQ,cAAc,EAAE,MAAM,KAAK,CAAA;AAG1C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAEpD,OAAO,8BAA8B,CAAA;AACrC,OAAO,0BAA0B,CAAA;AAEjC;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,cAAc,CAAC,gBAAgB,CAAC;IAGnD,aAAa,EAAE,cAAc;IAFhD,OAAgB,KAAK,SAAmC;gBAErC,aAAa,EAAE,cAAc;cAW7B,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;IAc5D,SAAS,CAAC,8BAA8B,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAc5D,SAAS,CAAC,sBAAsB,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IASpD,SAAS,CAAC,iCAAiC,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAc/D,SAAS,CAAC,gCAAgC,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAU9D,MAAM,IAAI,cAAc;IAOxB,SAAS,CAAC,cAAc,IAAI,cAAc;IAuB1C,SAAS,CAAC,wBAAwB,IAAI,cAAc;IAyBpD,SAAS,CAAC,2BAA2B,IAAI,cAAc;CAwBxD"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import { __esDecorate, __runInitializers } from "tslib";
|
|
2
|
+
import { DEFAULT_POSTAL_CODE_CONFIG } from '@api-client/core/modeling/definitions/PostalCode.js';
|
|
3
|
+
import { bound } from '../../decorators/bound.js';
|
|
4
|
+
import { html } from 'lit';
|
|
5
|
+
import { SemanticType } from '@api-client/core/modeling/Semantics.js';
|
|
6
|
+
import { renderHelp } from '../../help/render.js';
|
|
7
|
+
import { TaxonomyDialog } from './TaxonomyDialog.js';
|
|
8
|
+
import '../../md/chip/ui-chip-set.js';
|
|
9
|
+
import '../../md/chip/ui-chip.js';
|
|
10
|
+
/**
|
|
11
|
+
* A class that generates a dialog that allows the user to configure the taxonomy of a PostalCode annotated association.
|
|
12
|
+
*/
|
|
13
|
+
let PostalCodeTaxonomy = (() => {
|
|
14
|
+
let _classSuper = TaxonomyDialog;
|
|
15
|
+
let _instanceExtraInitializers = [];
|
|
16
|
+
let _render_decorators;
|
|
17
|
+
return class PostalCodeTaxonomy extends _classSuper {
|
|
18
|
+
static {
|
|
19
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
20
|
+
_render_decorators = [bound];
|
|
21
|
+
__esDecorate(this, null, _render_decorators, { kind: "method", name: "render", static: false, private: false, access: { has: obj => "render" in obj, get: obj => obj.render }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
22
|
+
if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
23
|
+
}
|
|
24
|
+
domainElement = __runInitializers(this, _instanceExtraInitializers);
|
|
25
|
+
static title = `Configure Postal Code Taxonomy`;
|
|
26
|
+
constructor(domainElement) {
|
|
27
|
+
let config;
|
|
28
|
+
const semantic = domainElement.semantics.find((s) => s.id === SemanticType.PostalCode);
|
|
29
|
+
if (semantic && semantic.config) {
|
|
30
|
+
config = structuredClone(semantic.config);
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
config = {};
|
|
34
|
+
}
|
|
35
|
+
super(config);
|
|
36
|
+
this.domainElement = domainElement;
|
|
37
|
+
}
|
|
38
|
+
formCallback(event) {
|
|
39
|
+
const semantic = this.domainElement.semantics.find((s) => s.id === SemanticType.PostalCode);
|
|
40
|
+
if (semantic) {
|
|
41
|
+
semantic.config = this.config;
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
this.domainElement.semantics.push({
|
|
45
|
+
id: SemanticType.PostalCode,
|
|
46
|
+
config: this.config,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
this.domainElement.domain.notifyChange();
|
|
50
|
+
return super.formCallback(event);
|
|
51
|
+
}
|
|
52
|
+
handleAllowedPostalCodesChange(event) {
|
|
53
|
+
const input = event.target;
|
|
54
|
+
const value = input.value.trim();
|
|
55
|
+
if (value) {
|
|
56
|
+
const postalCodes = this.config?.allowedPostalCodes ?? DEFAULT_POSTAL_CODE_CONFIG.allowedPostalCodes ?? [];
|
|
57
|
+
if (!postalCodes.includes(value)) {
|
|
58
|
+
postalCodes.push(value);
|
|
59
|
+
this.config = { ...this.config, allowedPostalCodes: postalCodes };
|
|
60
|
+
this.requestUpdate();
|
|
61
|
+
}
|
|
62
|
+
input.value = '';
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
handleRemovePostalCode(event) {
|
|
66
|
+
const chip = event.currentTarget;
|
|
67
|
+
const index = parseInt(chip.dataset.index || '-1', 10);
|
|
68
|
+
if (index >= 0 && this.config?.allowedPostalCodes) {
|
|
69
|
+
this.config.allowedPostalCodes.splice(index, 1);
|
|
70
|
+
this.requestUpdate();
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
handleDisallowedPostalCodesChange(event) {
|
|
74
|
+
const input = event.target;
|
|
75
|
+
const value = input.value.trim();
|
|
76
|
+
if (value) {
|
|
77
|
+
const postalCodes = this.config?.disallowedPostalCodes ?? DEFAULT_POSTAL_CODE_CONFIG.disallowedPostalCodes ?? [];
|
|
78
|
+
if (!postalCodes.includes(value)) {
|
|
79
|
+
postalCodes.push(value);
|
|
80
|
+
this.config = { ...this.config, disallowedPostalCodes: postalCodes };
|
|
81
|
+
this.requestUpdate();
|
|
82
|
+
}
|
|
83
|
+
input.value = '';
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
handleRemoveDisallowedPostalCode(event) {
|
|
87
|
+
const chip = event.currentTarget;
|
|
88
|
+
const index = parseInt(chip.dataset.index || '-1', 10);
|
|
89
|
+
if (index >= 0 && this.config?.disallowedPostalCodes) {
|
|
90
|
+
this.config.disallowedPostalCodes.splice(index, 1);
|
|
91
|
+
this.requestUpdate();
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
render() {
|
|
95
|
+
return html `
|
|
96
|
+
<div class="checkbox-group">${this.renderValidate()}</div>
|
|
97
|
+
<div class="input-group">${this.renderAllowedPostalCodes()} ${this.renderDisallowedPostalCodes()}</div>
|
|
98
|
+
`;
|
|
99
|
+
}
|
|
100
|
+
renderValidate() {
|
|
101
|
+
const enabled = this.config?.validate ?? DEFAULT_POSTAL_CODE_CONFIG.validate;
|
|
102
|
+
return html `
|
|
103
|
+
<div class="row">
|
|
104
|
+
<div class="input checkbox metadata">
|
|
105
|
+
<ui-checkbox
|
|
106
|
+
id="validate"
|
|
107
|
+
.checked="${enabled}"
|
|
108
|
+
name="validate"
|
|
109
|
+
@change="${this.handleBooleanChange}"
|
|
110
|
+
></ui-checkbox>
|
|
111
|
+
<div class="label">
|
|
112
|
+
<label for="validate" class="body-medium">Validate</label>
|
|
113
|
+
<span class="body-small meta"
|
|
114
|
+
>Enable strict validation of the postal code. This is an experimental feature.</span
|
|
115
|
+
>
|
|
116
|
+
</div>
|
|
117
|
+
</div>
|
|
118
|
+
${renderHelp('taxonomy', 'postalCode:validate')}
|
|
119
|
+
</div>
|
|
120
|
+
`;
|
|
121
|
+
}
|
|
122
|
+
renderAllowedPostalCodes() {
|
|
123
|
+
const value = this.config?.allowedPostalCodes ?? DEFAULT_POSTAL_CODE_CONFIG.allowedPostalCodes;
|
|
124
|
+
const chips = (value || []).map((postalCode, index) => html `<ui-chip type="input" removable data-index="${index}" @remove="${this.handleRemovePostalCode}"
|
|
125
|
+
>${postalCode}</ui-chip
|
|
126
|
+
>`);
|
|
127
|
+
return html `
|
|
128
|
+
<div class="row input-row">
|
|
129
|
+
<div class="input chips-input">
|
|
130
|
+
<ui-outlined-text-field
|
|
131
|
+
class="input"
|
|
132
|
+
name="allowedPostalCodes"
|
|
133
|
+
label="Allowed Postal Codes"
|
|
134
|
+
@change="${this.handleAllowedPostalCodesChange}"
|
|
135
|
+
supportingText="Add a postal code and press Enter to add it to the list."
|
|
136
|
+
></ui-outlined-text-field>
|
|
137
|
+
<ui-chip-set>${chips}</ui-chip-set>
|
|
138
|
+
</div>
|
|
139
|
+
${renderHelp('taxonomy', 'postalCode:allowedPostalCodes')}
|
|
140
|
+
</div>
|
|
141
|
+
`;
|
|
142
|
+
}
|
|
143
|
+
renderDisallowedPostalCodes() {
|
|
144
|
+
const value = this.config?.disallowedPostalCodes ?? DEFAULT_POSTAL_CODE_CONFIG.disallowedPostalCodes;
|
|
145
|
+
const chips = (value || []).map((postalCode, index) => html `<ui-chip type="input" removable data-index="${index}" @remove="${this.handleRemoveDisallowedPostalCode}"
|
|
146
|
+
>${postalCode}</ui-chip
|
|
147
|
+
>`);
|
|
148
|
+
return html `
|
|
149
|
+
<div class="row input-row">
|
|
150
|
+
<div class="input chips-input">
|
|
151
|
+
<ui-outlined-text-field
|
|
152
|
+
class="input"
|
|
153
|
+
name="disallowedPostalCodes"
|
|
154
|
+
label="Disallowed Postal Codes"
|
|
155
|
+
@change="${this.handleDisallowedPostalCodesChange}"
|
|
156
|
+
supportingText="Add a postal code and press Enter to add it to the list."
|
|
157
|
+
></ui-outlined-text-field>
|
|
158
|
+
<ui-chip-set>${chips}</ui-chip-set>
|
|
159
|
+
</div>
|
|
160
|
+
${renderHelp('taxonomy', 'postalCode:disallowedPostalCodes')}
|
|
161
|
+
</div>
|
|
162
|
+
`;
|
|
163
|
+
}
|
|
164
|
+
};
|
|
165
|
+
})();
|
|
166
|
+
export { PostalCodeTaxonomy };
|
|
167
|
+
//# sourceMappingURL=PostalCodeTaxonomy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PostalCodeTaxonomy.js","sourceRoot":"","sources":["../../../../src/modeling/dialogs/PostalCodeTaxonomy.ts"],"names":[],"mappings":"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","sourcesContent":["import type { DomainProperty } from '@api-client/core/modeling/DomainProperty.js'\nimport { type PostalCodeConfig, DEFAULT_POSTAL_CODE_CONFIG } from '@api-client/core/modeling/definitions/PostalCode.js'\nimport { bound } from '../../decorators/bound.js'\nimport { html, TemplateResult } from 'lit'\nimport { SemanticType } from '@api-client/core/modeling/Semantics.js'\nimport { renderHelp } from '../../help/render.js'\nimport { TaxonomyDialog } from './TaxonomyDialog.js'\n\nimport '../../md/chip/ui-chip-set.js'\nimport '../../md/chip/ui-chip.js'\n\n/**\n * A class that generates a dialog that allows the user to configure the taxonomy of a PostalCode annotated association.\n */\nexport class PostalCodeTaxonomy extends TaxonomyDialog<PostalCodeConfig> {\n static override title = `Configure Postal Code Taxonomy`\n\n constructor(public domainElement: DomainProperty) {\n let config: PostalCodeConfig\n const semantic = domainElement.semantics.find((s) => s.id === SemanticType.PostalCode)\n if (semantic && semantic.config) {\n config = structuredClone(semantic.config)\n } else {\n config = {}\n }\n super(config)\n }\n\n protected override formCallback(event: Event): Promise<void> {\n const semantic = this.domainElement.semantics.find((s) => s.id === SemanticType.PostalCode)\n if (semantic) {\n semantic.config = this.config\n } else {\n this.domainElement.semantics.push({\n id: SemanticType.PostalCode,\n config: this.config,\n })\n }\n this.domainElement.domain.notifyChange()\n return super.formCallback(event)\n }\n\n protected handleAllowedPostalCodesChange(event: Event): void {\n const input = event.target as HTMLInputElement\n const value = input.value.trim()\n if (value) {\n const postalCodes = this.config?.allowedPostalCodes ?? DEFAULT_POSTAL_CODE_CONFIG.allowedPostalCodes ?? []\n if (!postalCodes.includes(value)) {\n postalCodes.push(value)\n this.config = { ...this.config, allowedPostalCodes: postalCodes }\n this.requestUpdate()\n }\n input.value = ''\n }\n }\n\n protected handleRemovePostalCode(event: Event): void {\n const chip = event.currentTarget as HTMLElement\n const index = parseInt(chip.dataset.index || '-1', 10)\n if (index >= 0 && this.config?.allowedPostalCodes) {\n this.config.allowedPostalCodes.splice(index, 1)\n this.requestUpdate()\n }\n }\n\n protected handleDisallowedPostalCodesChange(event: Event): void {\n const input = event.target as HTMLInputElement\n const value = input.value.trim()\n if (value) {\n const postalCodes = this.config?.disallowedPostalCodes ?? DEFAULT_POSTAL_CODE_CONFIG.disallowedPostalCodes ?? []\n if (!postalCodes.includes(value)) {\n postalCodes.push(value)\n this.config = { ...this.config, disallowedPostalCodes: postalCodes }\n this.requestUpdate()\n }\n input.value = ''\n }\n }\n\n protected handleRemoveDisallowedPostalCode(event: Event): void {\n const chip = event.currentTarget as HTMLElement\n const index = parseInt(chip.dataset.index || '-1', 10)\n if (index >= 0 && this.config?.disallowedPostalCodes) {\n this.config.disallowedPostalCodes.splice(index, 1)\n this.requestUpdate()\n }\n }\n\n @bound\n render(): TemplateResult {\n return html`\n <div class=\"checkbox-group\">${this.renderValidate()}</div>\n <div class=\"input-group\">${this.renderAllowedPostalCodes()} ${this.renderDisallowedPostalCodes()}</div>\n `\n }\n\n protected renderValidate(): TemplateResult {\n const enabled = this.config?.validate ?? DEFAULT_POSTAL_CODE_CONFIG.validate\n return html`\n <div class=\"row\">\n <div class=\"input checkbox metadata\">\n <ui-checkbox\n id=\"validate\"\n .checked=\"${enabled}\"\n name=\"validate\"\n @change=\"${this.handleBooleanChange}\"\n ></ui-checkbox>\n <div class=\"label\">\n <label for=\"validate\" class=\"body-medium\">Validate</label>\n <span class=\"body-small meta\"\n >Enable strict validation of the postal code. This is an experimental feature.</span\n >\n </div>\n </div>\n ${renderHelp('taxonomy', 'postalCode:validate')}\n </div>\n `\n }\n\n protected renderAllowedPostalCodes(): TemplateResult {\n const value = this.config?.allowedPostalCodes ?? DEFAULT_POSTAL_CODE_CONFIG.allowedPostalCodes\n const chips = (value || []).map(\n (postalCode, index) =>\n html`<ui-chip type=\"input\" removable data-index=\"${index}\" @remove=\"${this.handleRemovePostalCode}\"\n >${postalCode}</ui-chip\n >`\n )\n return html`\n <div class=\"row input-row\">\n <div class=\"input chips-input\">\n <ui-outlined-text-field\n class=\"input\"\n name=\"allowedPostalCodes\"\n label=\"Allowed Postal Codes\"\n @change=\"${this.handleAllowedPostalCodesChange}\"\n supportingText=\"Add a postal code and press Enter to add it to the list.\"\n ></ui-outlined-text-field>\n <ui-chip-set>${chips}</ui-chip-set>\n </div>\n ${renderHelp('taxonomy', 'postalCode:allowedPostalCodes')}\n </div>\n `\n }\n\n protected renderDisallowedPostalCodes(): TemplateResult {\n const value = this.config?.disallowedPostalCodes ?? DEFAULT_POSTAL_CODE_CONFIG.disallowedPostalCodes\n const chips = (value || []).map(\n (postalCode, index) =>\n html`<ui-chip type=\"input\" removable data-index=\"${index}\" @remove=\"${this.handleRemoveDisallowedPostalCode}\"\n >${postalCode}</ui-chip\n >`\n )\n return html`\n <div class=\"row input-row\">\n <div class=\"input chips-input\">\n <ui-outlined-text-field\n class=\"input\"\n name=\"disallowedPostalCodes\"\n label=\"Disallowed Postal Codes\"\n @change=\"${this.handleDisallowedPostalCodesChange}\"\n supportingText=\"Add a postal code and press Enter to add it to the list.\"\n ></ui-outlined-text-field>\n <ui-chip-set>${chips}</ui-chip-set>\n </div>\n ${renderHelp('taxonomy', 'postalCode:disallowedPostalCodes')}\n </div>\n `\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DomainAutoFieldsDialog.d.ts","sourceRoot":"","sources":["../../../../src/modeling/internals/DomainAutoFieldsDialog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,cAAc,EAAE,MAAM,KAAK,CAAA;AAE/C,OAAO,EAAE,UAAU,EAAE,MAAM,KAAK,CAAA;AAKhC;;;;;GAKG;AACH,MAAM,CAAC,OAAO,OAAO,sBAAuB,SAAQ,UAAU;IAC5D;;OAEG;IACM,QAAQ,CAAC,cAAc,cAAoB;IAEpD;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,UAAU,
|
|
1
|
+
{"version":3,"file":"DomainAutoFieldsDialog.d.ts","sourceRoot":"","sources":["../../../../src/modeling/internals/DomainAutoFieldsDialog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,cAAc,EAAE,MAAM,KAAK,CAAA;AAE/C,OAAO,EAAE,UAAU,EAAE,MAAM,KAAK,CAAA;AAKhC;;;;;GAKG;AACH,MAAM,CAAC,OAAO,OAAO,sBAAuB,SAAQ,UAAU;IAC5D;;OAEG;IACM,QAAQ,CAAC,cAAc,cAAoB;IAEpD;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,UAAU,CA0L1B;IAED;;OAEG;IACH,KAAK,IAAI,IAAI;IAKb;;OAEG;IACH,OAAO,CAAC,iBAAiB;IASzB,OAAO,CAAC,iBAAiB;IAOzB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAOzB;;OAEG;IACH,OAAO,CAAC,YAAY;IAIX,MAAM,IAAI,cAAc;IAuBjC;;OAEG;IACH,OAAO,CAAC,cAAc;IAOtB;;OAEG;IACH,OAAO,CAAC,WAAW;CAepB"}
|
|
@@ -42,10 +42,15 @@ let DomainAutoFieldsDialog = (() => {
|
|
|
42
42
|
name: 'Name',
|
|
43
43
|
description: 'A human-readable name for the record.',
|
|
44
44
|
},
|
|
45
|
+
{
|
|
46
|
+
id: 'display-name',
|
|
47
|
+
name: 'Display Name',
|
|
48
|
+
description: 'A user-friendly label for UI presentation.',
|
|
49
|
+
},
|
|
45
50
|
{
|
|
46
51
|
id: 'description',
|
|
47
52
|
name: 'Description',
|
|
48
|
-
description: 'A detailed description of the record.',
|
|
53
|
+
description: 'A detailed description of the record with support for markdown.',
|
|
49
54
|
},
|
|
50
55
|
{
|
|
51
56
|
id: 'public-unique-name',
|
|
@@ -62,6 +67,11 @@ let DomainAutoFieldsDialog = (() => {
|
|
|
62
67
|
name: 'Email Address',
|
|
63
68
|
description: 'Email address with verification support.',
|
|
64
69
|
},
|
|
70
|
+
{
|
|
71
|
+
id: 'role',
|
|
72
|
+
name: 'User Role',
|
|
73
|
+
description: 'Defines the access level or permissions for a user.',
|
|
74
|
+
},
|
|
65
75
|
{
|
|
66
76
|
id: 'first-name',
|
|
67
77
|
name: 'First Name',
|
|
@@ -84,6 +94,36 @@ let DomainAutoFieldsDialog = (() => {
|
|
|
84
94
|
},
|
|
85
95
|
],
|
|
86
96
|
},
|
|
97
|
+
{
|
|
98
|
+
name: 'Contact & Address',
|
|
99
|
+
fields: [
|
|
100
|
+
{
|
|
101
|
+
id: 'street-address',
|
|
102
|
+
name: 'Street Address',
|
|
103
|
+
description: 'The street address.',
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
id: 'city',
|
|
107
|
+
name: 'City',
|
|
108
|
+
description: 'The city.',
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
id: 'region',
|
|
112
|
+
name: 'Region',
|
|
113
|
+
description: 'The region/state/province.',
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
id: 'postal-code',
|
|
117
|
+
name: 'Postal/Zip Code',
|
|
118
|
+
description: 'The international postal/zip code.',
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
id: 'country',
|
|
122
|
+
name: 'Country',
|
|
123
|
+
description: 'The country.',
|
|
124
|
+
},
|
|
125
|
+
],
|
|
126
|
+
},
|
|
87
127
|
{
|
|
88
128
|
name: 'Lifecycle & Status',
|
|
89
129
|
fields: [
|
|
@@ -139,21 +179,6 @@ let DomainAutoFieldsDialog = (() => {
|
|
|
139
179
|
},
|
|
140
180
|
],
|
|
141
181
|
},
|
|
142
|
-
{
|
|
143
|
-
name: 'Session & Security',
|
|
144
|
-
fields: [
|
|
145
|
-
{
|
|
146
|
-
id: 'session-id',
|
|
147
|
-
name: 'Session ID',
|
|
148
|
-
description: 'Unique identifier for user sessions.',
|
|
149
|
-
},
|
|
150
|
-
{
|
|
151
|
-
id: 'expires-at',
|
|
152
|
-
name: 'Expires At',
|
|
153
|
-
description: 'When a session or token expires.',
|
|
154
|
-
},
|
|
155
|
-
],
|
|
156
|
-
},
|
|
157
182
|
{
|
|
158
183
|
name: 'Audit Trail',
|
|
159
184
|
fields: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DomainAutoFieldsDialog.js","sourceRoot":"","sources":["../../../../src/modeling/internals/DomainAutoFieldsDialog.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, type TemplateResult } from 'lit'\nimport { state } from 'lit/decorators.js'\nimport { LitElement } from 'lit'\nimport { classMap } from 'lit/directives/class-map.js'\nimport type { UiListSelection } from '../../md/list/ui-list.js'\nimport type { AutoFieldCategory, AutoFieldDefinition, AutoFieldsSelectionResult } from '../types.js'\n\n/**\n * A component for selecting \"auto fields\" to add to an entity.\n *\n * @fires select - Dispatched when fields are selected with AutoFieldsSelectionResult detail\n * @fires cancel - Dispatched when the user cancels the selection\n */\nexport default class DomainAutoFieldsDialog extends LitElement {\n /**\n * The currently selected field IDs\n */\n @state() accessor selectedFields = new Set<string>()\n\n /**\n * The auto field categories and definitions\n */\n private readonly categories: AutoFieldCategory[] = [\n {\n name: 'Core Fields',\n fields: [\n {\n id: 'id',\n name: 'Identifier',\n description: 'The unique ID for each record.',\n },\n {\n id: 'name',\n name: 'Name',\n description: 'A human-readable name for the record.',\n },\n {\n id: 'description',\n name: 'Description',\n description: 'A detailed description of the record.',\n },\n {\n id: 'public-unique-name',\n name: 'Public Unique Name (Slug)',\n description: 'A URL-friendly unique identifier (e.g., \"my-product\").',\n },\n ],\n },\n {\n name: 'User Information',\n fields: [\n {\n id: 'email',\n name: 'Email Address',\n description: 'Email address with verification support.',\n },\n {\n id: 'first-name',\n name: 'First Name',\n description: 'The first name of a person.',\n },\n {\n id: 'last-name',\n name: 'Last Name',\n description: 'The last name of a person.',\n },\n {\n id: 'phone',\n name: 'Phone Number',\n description: 'Phone number with international format support.',\n },\n {\n id: 'avatar-url',\n name: 'Avatar URL',\n description: 'URL to a profile picture or avatar image.',\n },\n ],\n },\n {\n name: 'Lifecycle & Status',\n fields: [\n {\n id: 'status',\n name: 'Status',\n description: 'The current state of the record (e.g., Active, Draft, Archived).',\n },\n {\n id: 'version',\n name: 'Version Number',\n description: 'Tracks changes to prevent editing conflicts.',\n },\n {\n id: 'owner',\n name: 'Owner',\n description: 'Reference to the user or team that owns this record.',\n },\n ],\n },\n {\n name: 'E-commerce',\n fields: [\n {\n id: 'price',\n name: 'Price',\n description: 'Product price with currency support.',\n },\n {\n id: 'unit-price',\n name: 'Unit Price',\n description: 'Price per unit with currency support.',\n },\n {\n id: 'sku',\n name: 'SKU',\n description: 'Stock Keeping Unit - unique product identifier.',\n },\n {\n id: 'quantity',\n name: 'Quantity',\n description: 'Available quantity or stock amount.',\n },\n {\n id: 'weight',\n name: 'Weight',\n description: 'Physical weight of the item.',\n },\n {\n id: 'images',\n name: 'Images',\n description: 'Multiple image URLs for the product.',\n },\n ],\n },\n {\n name: 'Session & Security',\n fields: [\n {\n id: 'session-id',\n name: 'Session ID',\n description: 'Unique identifier for user sessions.',\n },\n {\n id: 'expires-at',\n name: 'Expires At',\n description: 'When a session or token expires.',\n },\n ],\n },\n {\n name: 'Audit Trail',\n fields: [\n {\n id: 'created',\n name: 'Created At',\n description: 'The date and time when the record was created.',\n },\n {\n id: 'updated',\n name: 'Updated At',\n description: 'The date and time when the record was last updated.',\n },\n {\n id: 'updated-by',\n name: 'Updated By',\n description: 'Reference to the user who last updated the record.',\n },\n ],\n },\n {\n name: 'Soft Delete',\n fields: [\n {\n id: 'is-deleted',\n name: 'Is Deleted',\n description: 'A true/false flag indicating if the record is deleted.',\n },\n {\n id: 'deleted',\n name: 'Deleted At',\n description: 'The date and time when the record was deleted.',\n },\n ],\n },\n ]\n\n /**\n * Resets the selection\n */\n reset(): void {\n this.selectedFields.clear()\n this.requestUpdate()\n }\n\n /**\n * Handles field selection toggle\n */\n private handleFieldToggle(fieldId: string): void {\n if (this.selectedFields.has(fieldId)) {\n this.selectedFields.delete(fieldId)\n } else {\n this.selectedFields.add(fieldId)\n }\n this.requestUpdate()\n }\n\n private handleFieldSelect(e: CustomEvent<UiListSelection>): void {\n const { item } = e.detail\n const { id } = item.dataset\n if (!id) return\n this.handleFieldToggle(id)\n }\n\n /**\n * Handles the Add Selected button click\n */\n private handleAddSelected(): void {\n const result: AutoFieldsSelectionResult = {\n selectedFields: Array.from(this.selectedFields),\n }\n this.dispatchEvent(new CustomEvent('select', { detail: result }))\n }\n\n /**\n * Handles the Cancel button click\n */\n private handleCancel(): void {\n this.dispatchEvent(new CustomEvent('cancel'))\n }\n\n override render(): TemplateResult {\n const selectedCount = this.selectedFields.size\n\n return html`\n <ui-list class=\"list\" @select=\"${this.handleFieldSelect}\"\n >${this.categories.map((category) => this.renderCategory(category))}</ui-list\n >\n\n <div class=\"dialog-actions\">\n <ui-button type=\"button\" @click=\"${this.handleCancel}\" class=\"cancel\">Cancel</ui-button>\n <ui-button\n type=\"button\"\n class=\"save\"\n color=\"filled\"\n ?disabled=\"${selectedCount === 0}\"\n @click=\"${this.handleAddSelected}\"\n >\n Add Selected (${selectedCount})\n </ui-button>\n </div>\n `\n }\n\n /**\n * Renders a category section\n */\n private renderCategory(category: AutoFieldCategory): TemplateResult {\n return html`\n <div class=\"category-title title-medium\">${category.name}</div>\n ${category.fields.map((field) => this.renderField(field))}\n `\n }\n\n /**\n * Renders a field item\n */\n private renderField(field: AutoFieldDefinition): TemplateResult {\n const isSelected = this.selectedFields.has(field.id)\n const classes = {\n 'field-item': true,\n 'selected': isSelected,\n }\n\n return html`\n <ui-list-item image=\"avatar\" data-id=\"${field.id}\" class=\"${classMap(classes)}\" lines=\"two\">\n <ui-checkbox slot=\"start\" .checked=\"${isSelected}\"></ui-checkbox>\n <div class=\"label\">${field.name}</div>\n <div slot=\"supporting-text\">${field.description}</div>\n </ui-list-item>\n `\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"DomainAutoFieldsDialog.js","sourceRoot":"","sources":["../../../../src/modeling/internals/DomainAutoFieldsDialog.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, type TemplateResult } from 'lit'\nimport { state } from 'lit/decorators.js'\nimport { LitElement } from 'lit'\nimport { classMap } from 'lit/directives/class-map.js'\nimport type { UiListSelection } from '../../md/list/ui-list.js'\nimport type { AutoFieldCategory, AutoFieldDefinition, AutoFieldsSelectionResult } from '../types.js'\n\n/**\n * A component for selecting \"auto fields\" to add to an entity.\n *\n * @fires select - Dispatched when fields are selected with AutoFieldsSelectionResult detail\n * @fires cancel - Dispatched when the user cancels the selection\n */\nexport default class DomainAutoFieldsDialog extends LitElement {\n /**\n * The currently selected field IDs\n */\n @state() accessor selectedFields = new Set<string>()\n\n /**\n * The auto field categories and definitions\n */\n private readonly categories: AutoFieldCategory[] = [\n {\n name: 'Core Fields',\n fields: [\n {\n id: 'id',\n name: 'Identifier',\n description: 'The unique ID for each record.',\n },\n {\n id: 'name',\n name: 'Name',\n description: 'A human-readable name for the record.',\n },\n {\n id: 'display-name',\n name: 'Display Name',\n description: 'A user-friendly label for UI presentation.',\n },\n {\n id: 'description',\n name: 'Description',\n description: 'A detailed description of the record with support for markdown.',\n },\n {\n id: 'public-unique-name',\n name: 'Public Unique Name (Slug)',\n description: 'A URL-friendly unique identifier (e.g., \"my-product\").',\n },\n ],\n },\n {\n name: 'User Information',\n fields: [\n {\n id: 'email',\n name: 'Email Address',\n description: 'Email address with verification support.',\n },\n {\n id: 'role',\n name: 'User Role',\n description: 'Defines the access level or permissions for a user.',\n },\n {\n id: 'first-name',\n name: 'First Name',\n description: 'The first name of a person.',\n },\n {\n id: 'last-name',\n name: 'Last Name',\n description: 'The last name of a person.',\n },\n {\n id: 'phone',\n name: 'Phone Number',\n description: 'Phone number with international format support.',\n },\n {\n id: 'avatar-url',\n name: 'Avatar URL',\n description: 'URL to a profile picture or avatar image.',\n },\n ],\n },\n {\n name: 'Contact & Address',\n fields: [\n {\n id: 'street-address',\n name: 'Street Address',\n description: 'The street address.',\n },\n {\n id: 'city',\n name: 'City',\n description: 'The city.',\n },\n {\n id: 'region',\n name: 'Region',\n description: 'The region/state/province.',\n },\n {\n id: 'postal-code',\n name: 'Postal/Zip Code',\n description: 'The international postal/zip code.',\n },\n {\n id: 'country',\n name: 'Country',\n description: 'The country.',\n },\n ],\n },\n {\n name: 'Lifecycle & Status',\n fields: [\n {\n id: 'status',\n name: 'Status',\n description: 'The current state of the record (e.g., Active, Draft, Archived).',\n },\n {\n id: 'version',\n name: 'Version Number',\n description: 'Tracks changes to prevent editing conflicts.',\n },\n {\n id: 'owner',\n name: 'Owner',\n description: 'Reference to the user or team that owns this record.',\n },\n ],\n },\n {\n name: 'E-commerce',\n fields: [\n {\n id: 'price',\n name: 'Price',\n description: 'Product price with currency support.',\n },\n {\n id: 'unit-price',\n name: 'Unit Price',\n description: 'Price per unit with currency support.',\n },\n {\n id: 'sku',\n name: 'SKU',\n description: 'Stock Keeping Unit - unique product identifier.',\n },\n {\n id: 'quantity',\n name: 'Quantity',\n description: 'Available quantity or stock amount.',\n },\n {\n id: 'weight',\n name: 'Weight',\n description: 'Physical weight of the item.',\n },\n {\n id: 'images',\n name: 'Images',\n description: 'Multiple image URLs for the product.',\n },\n ],\n },\n {\n name: 'Audit Trail',\n fields: [\n {\n id: 'created',\n name: 'Created At',\n description: 'The date and time when the record was created.',\n },\n {\n id: 'updated',\n name: 'Updated At',\n description: 'The date and time when the record was last updated.',\n },\n {\n id: 'updated-by',\n name: 'Updated By',\n description: 'Reference to the user who last updated the record.',\n },\n ],\n },\n {\n name: 'Soft Delete',\n fields: [\n {\n id: 'is-deleted',\n name: 'Is Deleted',\n description: 'A true/false flag indicating if the record is deleted.',\n },\n {\n id: 'deleted',\n name: 'Deleted At',\n description: 'The date and time when the record was deleted.',\n },\n ],\n },\n ]\n\n /**\n * Resets the selection\n */\n reset(): void {\n this.selectedFields.clear()\n this.requestUpdate()\n }\n\n /**\n * Handles field selection toggle\n */\n private handleFieldToggle(fieldId: string): void {\n if (this.selectedFields.has(fieldId)) {\n this.selectedFields.delete(fieldId)\n } else {\n this.selectedFields.add(fieldId)\n }\n this.requestUpdate()\n }\n\n private handleFieldSelect(e: CustomEvent<UiListSelection>): void {\n const { item } = e.detail\n const { id } = item.dataset\n if (!id) return\n this.handleFieldToggle(id)\n }\n\n /**\n * Handles the Add Selected button click\n */\n private handleAddSelected(): void {\n const result: AutoFieldsSelectionResult = {\n selectedFields: Array.from(this.selectedFields),\n }\n this.dispatchEvent(new CustomEvent('select', { detail: result }))\n }\n\n /**\n * Handles the Cancel button click\n */\n private handleCancel(): void {\n this.dispatchEvent(new CustomEvent('cancel'))\n }\n\n override render(): TemplateResult {\n const selectedCount = this.selectedFields.size\n\n return html`\n <ui-list class=\"list\" @select=\"${this.handleFieldSelect}\"\n >${this.categories.map((category) => this.renderCategory(category))}</ui-list\n >\n\n <div class=\"dialog-actions\">\n <ui-button type=\"button\" @click=\"${this.handleCancel}\" class=\"cancel\">Cancel</ui-button>\n <ui-button\n type=\"button\"\n class=\"save\"\n color=\"filled\"\n ?disabled=\"${selectedCount === 0}\"\n @click=\"${this.handleAddSelected}\"\n >\n Add Selected (${selectedCount})\n </ui-button>\n </div>\n `\n }\n\n /**\n * Renders a category section\n */\n private renderCategory(category: AutoFieldCategory): TemplateResult {\n return html`\n <div class=\"category-title title-medium\">${category.name}</div>\n ${category.fields.map((field) => this.renderField(field))}\n `\n }\n\n /**\n * Renders a field item\n */\n private renderField(field: AutoFieldDefinition): TemplateResult {\n const isSelected = this.selectedFields.has(field.id)\n const classes = {\n 'field-item': true,\n 'selected': isSelected,\n }\n\n return html`\n <ui-list-item image=\"avatar\" data-id=\"${field.id}\" class=\"${classMap(classes)}\" lines=\"two\">\n <ui-checkbox slot=\"start\" .checked=\"${isSelected}\"></ui-checkbox>\n <div class=\"label\">${field.name}</div>\n <div slot=\"supporting-text\">${field.description}</div>\n </ui-list-item>\n `\n }\n}\n"]}
|