@design.estate/dees-catalog 3.77.0 → 3.78.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.
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@design.estate/dees-catalog',
6
- version: '3.77.0',
6
+ version: '3.78.0',
7
7
  description: 'A comprehensive library that provides dynamic web components for building sophisticated and modern web applications using JavaScript and TypeScript.'
8
8
  };
9
9
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHNfd2ViLzAwX2NvbW1pdGluZm9fZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRztJQUN4QixJQUFJLEVBQUUsNkJBQTZCO0lBQ25DLE9BQU8sRUFBRSxRQUFRO0lBQ2pCLFdBQVcsRUFBRSxzSkFBc0o7Q0FDcEssQ0FBQSJ9
@@ -0,0 +1,33 @@
1
+ import { DeesElement, type TemplateResult } from '@design.estate/dees-element';
2
+ import '../../00group-layout/dees-tile/dees-tile.js';
3
+ declare global {
4
+ interface HTMLElementTagNameMap {
5
+ 'dees-settings': DeesSettings;
6
+ }
7
+ }
8
+ export interface ISettingsField {
9
+ key: string;
10
+ label: string;
11
+ value: string | TemplateResult;
12
+ }
13
+ export interface ISettingsAction {
14
+ name: string;
15
+ action: () => void | Promise<void>;
16
+ }
17
+ /**
18
+ * dees-settings — a read-only settings display tile with modal-style footer actions.
19
+ *
20
+ * Renders a dees-tile with a heading, a grid of label/value fields,
21
+ * and a footer action bar. When an action is clicked the component
22
+ * dispatches a `settings-action` CustomEvent with the action name.
23
+ */
24
+ export declare class DeesSettings extends DeesElement {
25
+ static demo: () => TemplateResult<1>;
26
+ static demoGroups: string[];
27
+ accessor heading: string;
28
+ accessor description: string;
29
+ accessor settingsFields: ISettingsField[];
30
+ accessor actions: ISettingsAction[];
31
+ static styles: import("@design.estate/dees-element").CSSResult[];
32
+ render(): TemplateResult;
33
+ }
@@ -0,0 +1,2 @@
1
+ import './dees-settings.js';
2
+ export declare const demoFunc: () => import("@design.estate/dees-element").TemplateResult<1>;
@@ -0,0 +1,60 @@
1
+ import { html, css, cssManager } from '@design.estate/dees-element';
2
+ import './dees-settings.js';
3
+ export const demoFunc = () => {
4
+ const acmeFields = [
5
+ { key: 'email', label: 'Account email', value: 'admin@example.com' },
6
+ { key: 'status', label: 'Status', value: 'enabled' },
7
+ { key: 'mode', label: 'Mode', value: 'production' },
8
+ { key: 'autoRenew', label: 'Auto-renew', value: 'on' },
9
+ { key: 'threshold', label: 'Renewal threshold', value: '30 days' },
10
+ ];
11
+ const acmeActions = [
12
+ { name: 'Edit', action: () => console.log('Edit clicked') },
13
+ ];
14
+ const emptyActions = [
15
+ { name: 'Configure', action: () => console.log('Configure clicked') },
16
+ ];
17
+ const multiActions = [
18
+ { name: 'Reset', action: () => console.log('Reset clicked') },
19
+ { name: 'Edit', action: () => console.log('Edit clicked') },
20
+ ];
21
+ return html `
22
+ <dees-demowrapper>
23
+ <style>
24
+ ${css `
25
+ .demoBox {
26
+ background: ${cssManager.bdTheme('hsl(0 0% 95%)', 'hsl(0 0% 9%)')};
27
+ padding: 40px;
28
+ display: flex;
29
+ flex-direction: column;
30
+ gap: 24px;
31
+ max-width: 600px;
32
+ }
33
+ `}
34
+ </style>
35
+ <div class="demoBox">
36
+ <dees-settings
37
+ .heading=${'ACME Settings'}
38
+ .settingsFields=${acmeFields}
39
+ .actions=${acmeActions}
40
+ ></dees-settings>
41
+
42
+ <dees-settings
43
+ .heading=${'ACME Settings'}
44
+ .description=${'No ACME configuration yet. Click Configure to set up automated TLS certificate issuance.'}
45
+ .actions=${emptyActions}
46
+ ></dees-settings>
47
+
48
+ <dees-settings
49
+ .heading=${'Server Config'}
50
+ .settingsFields=${[
51
+ { key: 'host', label: 'Hostname', value: 'proxy.example.com' },
52
+ { key: 'port', label: 'Port', value: '443' },
53
+ ]}
54
+ .actions=${multiActions}
55
+ ></dees-settings>
56
+ </div>
57
+ </dees-demowrapper>
58
+ `;
59
+ };
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1zZXR0aW5ncy5kZW1vLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtbGF5b3V0L2RlZXMtc2V0dGluZ3MvZGVlcy1zZXR0aW5ncy5kZW1vLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3BFLE9BQU8sb0JBQW9CLENBQUM7QUFHNUIsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLEdBQUcsRUFBRTtJQUMzQixNQUFNLFVBQVUsR0FBcUI7UUFDbkMsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLG1CQUFtQixFQUFFO1FBQ3BFLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUU7UUFDcEQsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRTtRQUNuRCxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO1FBQ3RELEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRTtLQUNuRSxDQUFDO0lBRUYsTUFBTSxXQUFXLEdBQXNCO1FBQ3JDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsRUFBRTtLQUM1RCxDQUFDO0lBRUYsTUFBTSxZQUFZLEdBQXNCO1FBQ3RDLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFO0tBQ3RFLENBQUM7SUFFRixNQUFNLFlBQVksR0FBc0I7UUFDdEMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxFQUFFO1FBQzdELEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsRUFBRTtLQUM1RCxDQUFDO0lBRUYsT0FBTyxJQUFJLENBQUE7OztVQUdILEdBQUcsQ0FBQTs7MEJBRWEsVUFBVSxDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQUUsY0FBYyxDQUFDOzs7Ozs7O1NBT3BFOzs7O3FCQUlZLGVBQWU7NEJBQ1IsVUFBVTtxQkFDakIsV0FBVzs7OztxQkFJWCxlQUFlO3lCQUNYLDBGQUEwRjtxQkFDOUYsWUFBWTs7OztxQkFJWixlQUFlOzRCQUNSO1FBQ2hCLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxtQkFBbUIsRUFBRTtRQUM5RCxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFO0tBQzdDO3FCQUNVLFlBQVk7Ozs7R0FJOUIsQ0FBQztBQUNKLENBQUMsQ0FBQyJ9
@@ -0,0 +1,240 @@
1
+ var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
2
+ function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
3
+ var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
4
+ var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
5
+ var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
6
+ var _, done = false;
7
+ for (var i = decorators.length - 1; i >= 0; i--) {
8
+ var context = {};
9
+ for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
10
+ for (var p in contextIn.access) context.access[p] = contextIn.access[p];
11
+ context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
12
+ var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
13
+ if (kind === "accessor") {
14
+ if (result === void 0) continue;
15
+ if (result === null || typeof result !== "object") throw new TypeError("Object expected");
16
+ if (_ = accept(result.get)) descriptor.get = _;
17
+ if (_ = accept(result.set)) descriptor.set = _;
18
+ if (_ = accept(result.init)) initializers.unshift(_);
19
+ }
20
+ else if (_ = accept(result)) {
21
+ if (kind === "field") initializers.unshift(_);
22
+ else descriptor[key] = _;
23
+ }
24
+ }
25
+ if (target) Object.defineProperty(target, contextIn.name, descriptor);
26
+ done = true;
27
+ };
28
+ var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
29
+ var useValue = arguments.length > 2;
30
+ for (var i = 0; i < initializers.length; i++) {
31
+ value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
32
+ }
33
+ return useValue ? value : void 0;
34
+ };
35
+ import { customElement, DeesElement, html, css, cssManager, property, } from '@design.estate/dees-element';
36
+ import { demoFunc } from './dees-settings.demo.js';
37
+ import { cssGeistFontFamily } from '../../00fonts.js';
38
+ import { themeDefaultStyles } from '../../00theme.js';
39
+ import '../../00group-layout/dees-tile/dees-tile.js';
40
+ /**
41
+ * dees-settings — a read-only settings display tile with modal-style footer actions.
42
+ *
43
+ * Renders a dees-tile with a heading, a grid of label/value fields,
44
+ * and a footer action bar. When an action is clicked the component
45
+ * dispatches a `settings-action` CustomEvent with the action name.
46
+ */
47
+ let DeesSettings = (() => {
48
+ let _classDecorators = [customElement('dees-settings')];
49
+ let _classDescriptor;
50
+ let _classExtraInitializers = [];
51
+ let _classThis;
52
+ let _classSuper = DeesElement;
53
+ let _heading_decorators;
54
+ let _heading_initializers = [];
55
+ let _heading_extraInitializers = [];
56
+ let _description_decorators;
57
+ let _description_initializers = [];
58
+ let _description_extraInitializers = [];
59
+ let _settingsFields_decorators;
60
+ let _settingsFields_initializers = [];
61
+ let _settingsFields_extraInitializers = [];
62
+ let _actions_decorators;
63
+ let _actions_initializers = [];
64
+ let _actions_extraInitializers = [];
65
+ var DeesSettings = class extends _classSuper {
66
+ static { _classThis = this; }
67
+ static {
68
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
69
+ _heading_decorators = [property({ type: String })];
70
+ _description_decorators = [property({ type: String })];
71
+ _settingsFields_decorators = [property({ attribute: false })];
72
+ _actions_decorators = [property({ attribute: false })];
73
+ __esDecorate(this, null, _heading_decorators, { kind: "accessor", name: "heading", static: false, private: false, access: { has: obj => "heading" in obj, get: obj => obj.heading, set: (obj, value) => { obj.heading = value; } }, metadata: _metadata }, _heading_initializers, _heading_extraInitializers);
74
+ __esDecorate(this, null, _description_decorators, { kind: "accessor", name: "description", static: false, private: false, access: { has: obj => "description" in obj, get: obj => obj.description, set: (obj, value) => { obj.description = value; } }, metadata: _metadata }, _description_initializers, _description_extraInitializers);
75
+ __esDecorate(this, null, _settingsFields_decorators, { kind: "accessor", name: "settingsFields", static: false, private: false, access: { has: obj => "settingsFields" in obj, get: obj => obj.settingsFields, set: (obj, value) => { obj.settingsFields = value; } }, metadata: _metadata }, _settingsFields_initializers, _settingsFields_extraInitializers);
76
+ __esDecorate(this, null, _actions_decorators, { kind: "accessor", name: "actions", static: false, private: false, access: { has: obj => "actions" in obj, get: obj => obj.actions, set: (obj, value) => { obj.actions = value; } }, metadata: _metadata }, _actions_initializers, _actions_extraInitializers);
77
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
78
+ DeesSettings = _classThis = _classDescriptor.value;
79
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
80
+ }
81
+ static demo = demoFunc;
82
+ static demoGroups = ['Layout'];
83
+ #heading_accessor_storage = __runInitializers(this, _heading_initializers, '');
84
+ get heading() { return this.#heading_accessor_storage; }
85
+ set heading(value) { this.#heading_accessor_storage = value; }
86
+ #description_accessor_storage = (__runInitializers(this, _heading_extraInitializers), __runInitializers(this, _description_initializers, ''));
87
+ get description() { return this.#description_accessor_storage; }
88
+ set description(value) { this.#description_accessor_storage = value; }
89
+ #settingsFields_accessor_storage = (__runInitializers(this, _description_extraInitializers), __runInitializers(this, _settingsFields_initializers, []));
90
+ get settingsFields() { return this.#settingsFields_accessor_storage; }
91
+ set settingsFields(value) { this.#settingsFields_accessor_storage = value; }
92
+ #actions_accessor_storage = (__runInitializers(this, _settingsFields_extraInitializers), __runInitializers(this, _actions_initializers, []));
93
+ get actions() { return this.#actions_accessor_storage; }
94
+ set actions(value) { this.#actions_accessor_storage = value; }
95
+ static styles = [
96
+ themeDefaultStyles,
97
+ cssManager.defaultStyles,
98
+ css `
99
+ :host {
100
+ display: block;
101
+ font-family: ${cssGeistFontFamily};
102
+ }
103
+
104
+ .settingsGrid {
105
+ display: grid;
106
+ grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
107
+ gap: 12px 24px;
108
+ padding: 16px;
109
+ }
110
+
111
+ .settingsField {
112
+ display: flex;
113
+ flex-direction: column;
114
+ gap: 2px;
115
+ }
116
+
117
+ .fieldLabel {
118
+ font-size: 11px;
119
+ text-transform: uppercase;
120
+ letter-spacing: 0.03em;
121
+ color: var(--dees-color-text-muted);
122
+ }
123
+
124
+ .fieldValue {
125
+ font-size: 13px;
126
+ color: var(--dees-color-text-primary);
127
+ }
128
+
129
+ .settingsDescription {
130
+ padding: 16px;
131
+ font-size: 13px;
132
+ line-height: 1.5;
133
+ color: var(--dees-color-text-muted);
134
+ }
135
+
136
+ .bottomButtons {
137
+ display: flex;
138
+ flex-direction: row;
139
+ justify-content: flex-end;
140
+ align-items: center;
141
+ gap: 0;
142
+ height: 36px;
143
+ width: 100%;
144
+ box-sizing: border-box;
145
+ }
146
+
147
+ .bottomButtons .bottomButton {
148
+ padding: 0 16px;
149
+ height: 100%;
150
+ text-align: center;
151
+ font-size: 12px;
152
+ font-weight: 500;
153
+ cursor: pointer;
154
+ user-select: none;
155
+ transition: all 0.15s ease;
156
+ background: transparent;
157
+ border: none;
158
+ border-left: 1px solid var(--dees-color-border-subtle);
159
+ color: var(--dees-color-text-muted);
160
+ white-space: nowrap;
161
+ display: flex;
162
+ align-items: center;
163
+ }
164
+
165
+ .bottomButtons .bottomButton:first-child {
166
+ border-left: none;
167
+ }
168
+
169
+ .bottomButtons .bottomButton:hover {
170
+ background: var(--dees-color-hover);
171
+ color: var(--dees-color-text-primary);
172
+ }
173
+
174
+ .bottomButtons .bottomButton:active {
175
+ background: ${cssManager.bdTheme('hsl(0 0% 92%)', 'hsl(0 0% 13%)')};
176
+ }
177
+
178
+ .bottomButtons .bottomButton.primary {
179
+ color: ${cssManager.bdTheme('hsl(217.2 91.2% 59.8%)', 'hsl(213.1 93.9% 67.8%)')};
180
+ font-weight: 600;
181
+ }
182
+
183
+ .bottomButtons .bottomButton.primary:hover {
184
+ background: ${cssManager.bdTheme('hsl(217.2 91.2% 59.8% / 0.08)', 'hsl(213.1 93.9% 67.8% / 0.08)')};
185
+ color: ${cssManager.bdTheme('hsl(217.2 91.2% 50%)', 'hsl(213.1 93.9% 75%)')};
186
+ }
187
+
188
+ .bottomButtons .bottomButton.primary:active {
189
+ background: ${cssManager.bdTheme('hsl(217.2 91.2% 59.8% / 0.15)', 'hsl(213.1 93.9% 67.8% / 0.15)')};
190
+ }
191
+ `,
192
+ ];
193
+ render() {
194
+ const hasFields = this.settingsFields.length > 0;
195
+ const hasActions = this.actions.length > 0;
196
+ return html `
197
+ <dees-tile .heading=${this.heading}>
198
+ ${hasFields
199
+ ? html `
200
+ <div class="settingsGrid">
201
+ ${this.settingsFields.map((field) => html `
202
+ <div class="settingsField">
203
+ <span class="fieldLabel">${field.label}</span>
204
+ <span class="fieldValue">${field.value}</span>
205
+ </div>
206
+ `)}
207
+ </div>
208
+ `
209
+ : html `
210
+ <div class="settingsDescription">${this.description}</div>
211
+ `}
212
+ ${hasActions
213
+ ? html `
214
+ <div slot="footer" class="bottomButtons">
215
+ ${this.actions.map((actionArg, index) => html `
216
+ <div
217
+ class="bottomButton ${index === this.actions.length - 1 ? 'primary' : ''}"
218
+ @click=${() => actionArg.action()}
219
+ >
220
+ ${actionArg.name}
221
+ </div>
222
+ `)}
223
+ </div>
224
+ `
225
+ : ''}
226
+ </dees-tile>
227
+ `;
228
+ }
229
+ constructor() {
230
+ super(...arguments);
231
+ __runInitializers(this, _actions_extraInitializers);
232
+ }
233
+ static {
234
+ __runInitializers(_classThis, _classExtraInitializers);
235
+ }
236
+ };
237
+ return DeesSettings = _classThis;
238
+ })();
239
+ export { DeesSettings };
240
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1zZXR0aW5ncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWxheW91dC9kZWVzLXNldHRpbmdzL2RlZXMtc2V0dGluZ3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sRUFDTCxhQUFhLEVBQ2IsV0FBVyxFQUNYLElBQUksRUFDSixHQUFHLEVBQ0gsVUFBVSxFQUNWLFFBQVEsR0FFVCxNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN0RCxPQUFPLDZDQUE2QyxDQUFDO0FBbUJyRDs7Ozs7O0dBTUc7SUFFVSxZQUFZOzRCQUR4QixhQUFhLENBQUMsZUFBZSxDQUFDOzs7O3NCQUNHLFdBQVc7Ozs7Ozs7Ozs7Ozs7NEJBQW5CLFNBQVEsV0FBVzs7OzttQ0FJMUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO3VDQUcxQixRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7MENBRzFCLFFBQVEsQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQzttQ0FHOUIsUUFBUSxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDO1lBUi9CLDBLQUFTLE9BQU8sNkJBQVAsT0FBTyx5RkFBYztZQUc5QixzTEFBUyxXQUFXLDZCQUFYLFdBQVcsaUdBQWM7WUFHbEMsK0xBQVMsY0FBYyw2QkFBZCxjQUFjLHVHQUF3QjtZQUcvQywwS0FBUyxPQUFPLDZCQUFQLE9BQU8seUZBQXlCO1lBZDNDLDZLQTRKQzs7OztRQTNKUSxNQUFN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
@@ -0,0 +1 @@
1
+ export * from './dees-settings.js';
@@ -0,0 +1,2 @@
1
+ export * from './dees-settings.js';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90c193ZWIvZWxlbWVudHMvMDBncm91cC1sYXlvdXQvZGVlcy1zZXR0aW5ncy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG9CQUFvQixDQUFDIn0=
@@ -4,5 +4,6 @@ export * from './dees-heading/index.js';
4
4
  export * from './dees-label/index.js';
5
5
  export * from './dees-pagination/index.js';
6
6
  export * from './dees-panel/index.js';
7
+ export * from './dees-settings/index.js';
7
8
  export * from './dees-stepper/index.js';
8
9
  export * from './dees-tile/index.js';
@@ -5,6 +5,7 @@ export * from './dees-heading/index.js';
5
5
  export * from './dees-label/index.js';
6
6
  export * from './dees-pagination/index.js';
7
7
  export * from './dees-panel/index.js';
8
+ export * from './dees-settings/index.js';
8
9
  export * from './dees-stepper/index.js';
9
10
  export * from './dees-tile/index.js';
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90c193ZWIvZWxlbWVudHMvMDBncm91cC1sYXlvdXQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsb0JBQW9CO0FBQ3BCLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyxzQkFBc0IsQ0FBQyJ9
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90c193ZWIvZWxlbWVudHMvMDBncm91cC1sYXlvdXQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsb0JBQW9CO0FBQ3BCLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLHNCQUFzQixDQUFDIn0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@design.estate/dees-catalog",
3
- "version": "3.77.0",
3
+ "version": "3.78.0",
4
4
  "private": false,
5
5
  "description": "A comprehensive library that provides dynamic web components for building sophisticated and modern web applications using JavaScript and TypeScript.",
6
6
  "main": "dist_ts_web/index.js",
@@ -3,6 +3,6 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@design.estate/dees-catalog',
6
- version: '3.77.0',
6
+ version: '3.78.0',
7
7
  description: 'A comprehensive library that provides dynamic web components for building sophisticated and modern web applications using JavaScript and TypeScript.'
8
8
  }
@@ -0,0 +1,65 @@
1
+ import { html, css, cssManager } from '@design.estate/dees-element';
2
+ import './dees-settings.js';
3
+ import type { ISettingsField, ISettingsAction } from './dees-settings.js';
4
+
5
+ export const demoFunc = () => {
6
+ const acmeFields: ISettingsField[] = [
7
+ { key: 'email', label: 'Account email', value: 'admin@example.com' },
8
+ { key: 'status', label: 'Status', value: 'enabled' },
9
+ { key: 'mode', label: 'Mode', value: 'production' },
10
+ { key: 'autoRenew', label: 'Auto-renew', value: 'on' },
11
+ { key: 'threshold', label: 'Renewal threshold', value: '30 days' },
12
+ ];
13
+
14
+ const acmeActions: ISettingsAction[] = [
15
+ { name: 'Edit', action: () => console.log('Edit clicked') },
16
+ ];
17
+
18
+ const emptyActions: ISettingsAction[] = [
19
+ { name: 'Configure', action: () => console.log('Configure clicked') },
20
+ ];
21
+
22
+ const multiActions: ISettingsAction[] = [
23
+ { name: 'Reset', action: () => console.log('Reset clicked') },
24
+ { name: 'Edit', action: () => console.log('Edit clicked') },
25
+ ];
26
+
27
+ return html`
28
+ <dees-demowrapper>
29
+ <style>
30
+ ${css`
31
+ .demoBox {
32
+ background: ${cssManager.bdTheme('hsl(0 0% 95%)', 'hsl(0 0% 9%)')};
33
+ padding: 40px;
34
+ display: flex;
35
+ flex-direction: column;
36
+ gap: 24px;
37
+ max-width: 600px;
38
+ }
39
+ `}
40
+ </style>
41
+ <div class="demoBox">
42
+ <dees-settings
43
+ .heading=${'ACME Settings'}
44
+ .settingsFields=${acmeFields}
45
+ .actions=${acmeActions}
46
+ ></dees-settings>
47
+
48
+ <dees-settings
49
+ .heading=${'ACME Settings'}
50
+ .description=${'No ACME configuration yet. Click Configure to set up automated TLS certificate issuance.'}
51
+ .actions=${emptyActions}
52
+ ></dees-settings>
53
+
54
+ <dees-settings
55
+ .heading=${'Server Config'}
56
+ .settingsFields=${[
57
+ { key: 'host', label: 'Hostname', value: 'proxy.example.com' },
58
+ { key: 'port', label: 'Port', value: '443' },
59
+ ]}
60
+ .actions=${multiActions}
61
+ ></dees-settings>
62
+ </div>
63
+ </dees-demowrapper>
64
+ `;
65
+ };
@@ -0,0 +1,196 @@
1
+ import {
2
+ customElement,
3
+ DeesElement,
4
+ html,
5
+ css,
6
+ cssManager,
7
+ property,
8
+ type TemplateResult,
9
+ } from '@design.estate/dees-element';
10
+ import { demoFunc } from './dees-settings.demo.js';
11
+ import { cssGeistFontFamily } from '../../00fonts.js';
12
+ import { themeDefaultStyles } from '../../00theme.js';
13
+ import '../../00group-layout/dees-tile/dees-tile.js';
14
+
15
+ declare global {
16
+ interface HTMLElementTagNameMap {
17
+ 'dees-settings': DeesSettings;
18
+ }
19
+ }
20
+
21
+ export interface ISettingsField {
22
+ key: string;
23
+ label: string;
24
+ value: string | TemplateResult;
25
+ }
26
+
27
+ export interface ISettingsAction {
28
+ name: string;
29
+ action: () => void | Promise<void>;
30
+ }
31
+
32
+ /**
33
+ * dees-settings — a read-only settings display tile with modal-style footer actions.
34
+ *
35
+ * Renders a dees-tile with a heading, a grid of label/value fields,
36
+ * and a footer action bar. When an action is clicked the component
37
+ * dispatches a `settings-action` CustomEvent with the action name.
38
+ */
39
+ @customElement('dees-settings')
40
+ export class DeesSettings extends DeesElement {
41
+ public static demo = demoFunc;
42
+ public static demoGroups = ['Layout'];
43
+
44
+ @property({ type: String })
45
+ accessor heading: string = '';
46
+
47
+ @property({ type: String })
48
+ accessor description: string = '';
49
+
50
+ @property({ attribute: false })
51
+ accessor settingsFields: ISettingsField[] = [];
52
+
53
+ @property({ attribute: false })
54
+ accessor actions: ISettingsAction[] = [];
55
+
56
+ public static styles = [
57
+ themeDefaultStyles,
58
+ cssManager.defaultStyles,
59
+ css`
60
+ :host {
61
+ display: block;
62
+ font-family: ${cssGeistFontFamily};
63
+ }
64
+
65
+ .settingsGrid {
66
+ display: grid;
67
+ grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
68
+ gap: 12px 24px;
69
+ padding: 16px;
70
+ }
71
+
72
+ .settingsField {
73
+ display: flex;
74
+ flex-direction: column;
75
+ gap: 2px;
76
+ }
77
+
78
+ .fieldLabel {
79
+ font-size: 11px;
80
+ text-transform: uppercase;
81
+ letter-spacing: 0.03em;
82
+ color: var(--dees-color-text-muted);
83
+ }
84
+
85
+ .fieldValue {
86
+ font-size: 13px;
87
+ color: var(--dees-color-text-primary);
88
+ }
89
+
90
+ .settingsDescription {
91
+ padding: 16px;
92
+ font-size: 13px;
93
+ line-height: 1.5;
94
+ color: var(--dees-color-text-muted);
95
+ }
96
+
97
+ .bottomButtons {
98
+ display: flex;
99
+ flex-direction: row;
100
+ justify-content: flex-end;
101
+ align-items: center;
102
+ gap: 0;
103
+ height: 36px;
104
+ width: 100%;
105
+ box-sizing: border-box;
106
+ }
107
+
108
+ .bottomButtons .bottomButton {
109
+ padding: 0 16px;
110
+ height: 100%;
111
+ text-align: center;
112
+ font-size: 12px;
113
+ font-weight: 500;
114
+ cursor: pointer;
115
+ user-select: none;
116
+ transition: all 0.15s ease;
117
+ background: transparent;
118
+ border: none;
119
+ border-left: 1px solid var(--dees-color-border-subtle);
120
+ color: var(--dees-color-text-muted);
121
+ white-space: nowrap;
122
+ display: flex;
123
+ align-items: center;
124
+ }
125
+
126
+ .bottomButtons .bottomButton:first-child {
127
+ border-left: none;
128
+ }
129
+
130
+ .bottomButtons .bottomButton:hover {
131
+ background: var(--dees-color-hover);
132
+ color: var(--dees-color-text-primary);
133
+ }
134
+
135
+ .bottomButtons .bottomButton:active {
136
+ background: ${cssManager.bdTheme('hsl(0 0% 92%)', 'hsl(0 0% 13%)')};
137
+ }
138
+
139
+ .bottomButtons .bottomButton.primary {
140
+ color: ${cssManager.bdTheme('hsl(217.2 91.2% 59.8%)', 'hsl(213.1 93.9% 67.8%)')};
141
+ font-weight: 600;
142
+ }
143
+
144
+ .bottomButtons .bottomButton.primary:hover {
145
+ background: ${cssManager.bdTheme('hsl(217.2 91.2% 59.8% / 0.08)', 'hsl(213.1 93.9% 67.8% / 0.08)')};
146
+ color: ${cssManager.bdTheme('hsl(217.2 91.2% 50%)', 'hsl(213.1 93.9% 75%)')};
147
+ }
148
+
149
+ .bottomButtons .bottomButton.primary:active {
150
+ background: ${cssManager.bdTheme('hsl(217.2 91.2% 59.8% / 0.15)', 'hsl(213.1 93.9% 67.8% / 0.15)')};
151
+ }
152
+ `,
153
+ ];
154
+
155
+ public render(): TemplateResult {
156
+ const hasFields = this.settingsFields.length > 0;
157
+ const hasActions = this.actions.length > 0;
158
+
159
+ return html`
160
+ <dees-tile .heading=${this.heading}>
161
+ ${hasFields
162
+ ? html`
163
+ <div class="settingsGrid">
164
+ ${this.settingsFields.map(
165
+ (field) => html`
166
+ <div class="settingsField">
167
+ <span class="fieldLabel">${field.label}</span>
168
+ <span class="fieldValue">${field.value}</span>
169
+ </div>
170
+ `,
171
+ )}
172
+ </div>
173
+ `
174
+ : html`
175
+ <div class="settingsDescription">${this.description}</div>
176
+ `}
177
+ ${hasActions
178
+ ? html`
179
+ <div slot="footer" class="bottomButtons">
180
+ ${this.actions.map(
181
+ (actionArg, index) => html`
182
+ <div
183
+ class="bottomButton ${index === this.actions.length - 1 ? 'primary' : ''}"
184
+ @click=${() => actionArg.action()}
185
+ >
186
+ ${actionArg.name}
187
+ </div>
188
+ `,
189
+ )}
190
+ </div>
191
+ `
192
+ : ''}
193
+ </dees-tile>
194
+ `;
195
+ }
196
+ }
@@ -0,0 +1 @@
1
+ export * from './dees-settings.js';
@@ -5,5 +5,6 @@ export * from './dees-heading/index.js';
5
5
  export * from './dees-label/index.js';
6
6
  export * from './dees-pagination/index.js';
7
7
  export * from './dees-panel/index.js';
8
+ export * from './dees-settings/index.js';
8
9
  export * from './dees-stepper/index.js';
9
10
  export * from './dees-tile/index.js';