@k8slens/details-panel-components 1.0.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/README.md ADDED
@@ -0,0 +1,11 @@
1
+ # @k8slens/details-panel-components
2
+
3
+ The presentational parts a details panel section is made of: `DrawerItem` for a name and value row, `DrawerItemLabels` for a row of labels, `ExpandableDrawerItem` for a row that collapses, `DrawerSubTitle` for a heading inside a section, `NoItemsDetailItem` for the empty case and `ConditionBadge` for a Kubernetes condition. They are props in and JSX out, register nothing, and are what the sections of Lens itself render, so a section built from them looks native.
4
+
5
+ Several components share this package on purpose: they are one section's vocabulary and only make sense together.
6
+
7
+ # Usage
8
+
9
+ ```bash
10
+ $ npm install @k8slens/details-panel-components
11
+ ```
@@ -0,0 +1,9 @@
1
+ export { DrawerItem, type DrawerItemProps } from "./src/drawer-item";
2
+ export { DrawerSubTitle, type DrawerSubTitleProps } from "./src/drawer-sub-title";
3
+ export { ExpandableDrawerItem, type ExpandableDrawerItemProps } from "./src/expandable-drawer-item";
4
+ export { DrawerItemLabels, type DrawerItemLabelsProps } from "./src/drawer-item-labels";
5
+ export { NoItemsDetailItem, type NoItemsDetailItemProps } from "./src/no-items-detail-item";
6
+ export { ConditionBadge, type ConditionBadgeProps } from "./src/condition-badge";
7
+ export { ConditionTooltipContent, type ConditionTooltipContentProps } from "./src/condition-tooltip-content";
8
+ export type { Condition } from "./src/condition";
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,KAAK,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAClF,OAAO,EAAE,oBAAoB,EAAE,KAAK,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AACpG,OAAO,EAAE,gBAAgB,EAAE,KAAK,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACxF,OAAO,EAAE,iBAAiB,EAAE,KAAK,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAC5F,OAAO,EAAE,cAAc,EAAE,KAAK,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACjF,OAAO,EAAE,uBAAuB,EAAE,KAAK,4BAA4B,EAAE,MAAM,iCAAiC,CAAC;AAC7G,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,214 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // index.ts
21
+ var index_exports = {};
22
+ __export(index_exports, {
23
+ ConditionBadge: () => ConditionBadge,
24
+ ConditionTooltipContent: () => ConditionTooltipContent,
25
+ DrawerItem: () => DrawerItem,
26
+ DrawerItemLabels: () => DrawerItemLabels,
27
+ DrawerSubTitle: () => DrawerSubTitle,
28
+ ExpandableDrawerItem: () => ExpandableDrawerItem,
29
+ NoItemsDetailItem: () => NoItemsDetailItem
30
+ });
31
+ module.exports = __toCommonJS(index_exports);
32
+
33
+ // src/drawer-item-parts.tsx
34
+ var import_react = require("react");
35
+ var import_element_components = require("@k8slens/element-components");
36
+ var import_jsx_runtime = require("react/jsx-runtime");
37
+ var DrawerItemRow = ({ children, ...rest }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
38
+ import_element_components.Div,
39
+ {
40
+ $flex: { direction: "horizontal", wrap: true },
41
+ $padding: { vertical: "xs", right: "xs", left: "s" },
42
+ $backgroundColor: "backgroundPrimary",
43
+ $border: { bottom: { width: "xxs", color: "grey60" }, exceptLast: true },
44
+ ...rest,
45
+ children
46
+ }
47
+ );
48
+ var DrawerItemName = ({ children, ...rest }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
49
+ import_element_components.Span,
50
+ {
51
+ "data-drawer-item-name-test": true,
52
+ $flexChild: "fixed",
53
+ $width: { min: "30%" },
54
+ $padding: { right: "xs" },
55
+ $overflow: "hidden",
56
+ $font: { textOverflow: "ellipsis" },
57
+ ...rest,
58
+ children
59
+ }
60
+ );
61
+ var DrawerItemValue = ({ labelsOnly, children, ...rest }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
62
+ import_element_components.Span,
63
+ {
64
+ "data-drawer-item-value-test": true,
65
+ $flexChild: "shrinkable",
66
+ $font: { forceWrap: true },
67
+ $flex: labelsOnly ? { direction: "horizontal", wrap: true, gap: "xs" } : void 0,
68
+ ...rest,
69
+ children: hasContent(children) ? children : "\u2014"
70
+ }
71
+ );
72
+ var hasContent = (children) => import_react.Children.toArray(children).some((child) => child !== "" && child !== null && child !== void 0);
73
+
74
+ // src/drawer-item.tsx
75
+ var import_jsx_runtime2 = require("react/jsx-runtime");
76
+ var DrawerItem = ({ name, labelsOnly, children, ...rest }) => /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(DrawerItemRow, { ...rest, children: [
77
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(DrawerItemName, { children: name }),
78
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(DrawerItemValue, { labelsOnly, children })
79
+ ] });
80
+
81
+ // src/drawer-sub-title.tsx
82
+ var import_element_components2 = require("@k8slens/element-components");
83
+ var import_jsx_runtime3 = require("react/jsx-runtime");
84
+ var DrawerSubTitle = ({ children, ...rest }) => /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_element_components2.Div, { $padding: "s", $font: { bold: true }, ...rest, children });
85
+
86
+ // src/expandable-drawer-item.tsx
87
+ var import_react2 = require("react");
88
+ var import_element_components3 = require("@k8slens/element-components");
89
+ var import_icon = require("@k8slens/icon");
90
+ var import_jsx_runtime4 = require("react/jsx-runtime");
91
+ var ExpandableDrawerItem = ({
92
+ name,
93
+ children,
94
+ collapsedContent,
95
+ isExpandable = true,
96
+ fullWidthContent,
97
+ labelsOnly,
98
+ buttonProps = {},
99
+ expanded: controlledExpanded,
100
+ onToggle,
101
+ ...rest
102
+ }) => {
103
+ const [ownExpanded, setOwnExpanded] = (0, import_react2.useState)(false);
104
+ const isControlled = controlledExpanded !== void 0;
105
+ const expanded = isControlled ? controlledExpanded : ownExpanded;
106
+ const toggle = () => {
107
+ onToggle == null ? void 0 : onToggle();
108
+ if (!isControlled) {
109
+ setOwnExpanded((value) => !value);
110
+ }
111
+ };
112
+ const content = !isExpandable || expanded ? children : collapsedContent;
113
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(DrawerItemRow, { ...rest, children: [
114
+ isExpandable ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
115
+ import_element_components3.Button,
116
+ {
117
+ ...buttonProps,
118
+ $onClick: toggle,
119
+ $flexChild: "fixed",
120
+ $width: { min: "30%" },
121
+ $padding: { right: "xs" },
122
+ $textAlign: "left",
123
+ $flex: { direction: "horizontal", verticalAlign: "center", gap: "xxs" },
124
+ children: [
125
+ name,
126
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_icon.Icon, { material: expanded ? "unfold_less" : "unfold_more", smallest: true })
127
+ ]
128
+ }
129
+ ) : /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(DrawerItemName, { children: name }),
130
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(DrawerItemValue, { labelsOnly, $width: fullWidthContent && expanded ? "full" : void 0, children: content })
131
+ ] });
132
+ };
133
+
134
+ // src/drawer-item-labels.tsx
135
+ var import_badge = require("@k8slens/badge");
136
+ var import_jsx_runtime5 = require("react/jsx-runtime");
137
+ var expandableLabelsCharLengthLimit = 40;
138
+ var stringifyLabels = (labels) => Object.entries(labels).map(([name, value]) => `${name}=${value}`);
139
+ var DrawerItemLabels = ({ labels, name, ...rest }) => {
140
+ if (!labels || typeof labels !== "object") {
141
+ return null;
142
+ }
143
+ const labelStrings = Array.isArray(labels) ? labels : stringifyLabels(labels);
144
+ if (labelStrings.length === 0) {
145
+ return null;
146
+ }
147
+ const isExpandable = labelStrings.length > 1 && labelStrings.join().length > expandableLabelsCharLengthLimit;
148
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
149
+ ExpandableDrawerItem,
150
+ {
151
+ ...rest,
152
+ name,
153
+ labelsOnly: true,
154
+ collapsedContent: `${labelStrings.length} ${name}`,
155
+ isExpandable,
156
+ children: labelStrings.map((label) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_badge.Badge, { label, title: label }, label))
157
+ }
158
+ );
159
+ };
160
+
161
+ // src/no-items-detail-item.tsx
162
+ var import_element_components4 = require("@k8slens/element-components");
163
+ var import_jsx_runtime6 = require("react/jsx-runtime");
164
+ var NoItemsDetailItem = ({ children, ...rest }) => /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_element_components4.Div, { $padding: { vertical: "xs", right: "xs", left: "s" }, ...rest, children });
165
+
166
+ // src/condition-badge.tsx
167
+ var import_badge2 = require("@k8slens/badge");
168
+ var import_element_components5 = require("@k8slens/element-components");
169
+
170
+ // src/condition-tooltip-content.tsx
171
+ var import_jsx_runtime7 = require("react/jsx-runtime");
172
+ var ConditionTooltipContent = ({ condition }) => /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(import_jsx_runtime7.Fragment, { children: [
173
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("p", { children: condition.message }),
174
+ condition.lastTransitionTime ? /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("p", { children: `Last transition time: ${condition.lastTransitionTime}` }) : null
175
+ ] });
176
+
177
+ // src/condition-badge.tsx
178
+ var import_jsx_runtime8 = require("react/jsx-runtime");
179
+ var conditionTypeToColor = {
180
+ Available: "success",
181
+ Accepted: "success",
182
+ Ready: "success",
183
+ Progressing: "notice",
184
+ Programmed: "success",
185
+ ResolvedRefs: "success",
186
+ Reconciled: "success",
187
+ ReplicaFailure: "critical"
188
+ };
189
+ var ConditionBadge = ({ condition, label, ...rest }) => {
190
+ const { type, status } = condition;
191
+ const color = status === "True" ? conditionTypeToColor[type] : void 0;
192
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
193
+ import_badge2.Badge,
194
+ {
195
+ label: label ?? type,
196
+ $disabled: status !== "True",
197
+ $backgroundColor: color,
198
+ $color: color ? "white" : void 0,
199
+ $tooltip: (0, import_element_components5.getTooltipProps)({ Content: ConditionTooltipContent, contentProps: { condition } }),
200
+ ...rest
201
+ }
202
+ );
203
+ };
204
+ // Annotate the CommonJS export names for ESM import in node:
205
+ 0 && (module.exports = {
206
+ ConditionBadge,
207
+ ConditionTooltipContent,
208
+ DrawerItem,
209
+ DrawerItemLabels,
210
+ DrawerSubTitle,
211
+ ExpandableDrawerItem,
212
+ NoItemsDetailItem
213
+ });
214
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vaW5kZXgudHMiLCAiLi4vc3JjL2RyYXdlci1pdGVtLXBhcnRzLnRzeCIsICIuLi9zcmMvZHJhd2VyLWl0ZW0udHN4IiwgIi4uL3NyYy9kcmF3ZXItc3ViLXRpdGxlLnRzeCIsICIuLi9zcmMvZXhwYW5kYWJsZS1kcmF3ZXItaXRlbS50c3giLCAiLi4vc3JjL2RyYXdlci1pdGVtLWxhYmVscy50c3giLCAiLi4vc3JjL25vLWl0ZW1zLWRldGFpbC1pdGVtLnRzeCIsICIuLi9zcmMvY29uZGl0aW9uLWJhZGdlLnRzeCIsICIuLi9zcmMvY29uZGl0aW9uLXRvb2x0aXAtY29udGVudC50c3giXSwKICAic291cmNlc0NvbnRlbnQiOiBbImV4cG9ydCB7IERyYXdlckl0ZW0sIHR5cGUgRHJhd2VySXRlbVByb3BzIH0gZnJvbSBcIi4vc3JjL2RyYXdlci1pdGVtXCI7XG5leHBvcnQgeyBEcmF3ZXJTdWJUaXRsZSwgdHlwZSBEcmF3ZXJTdWJUaXRsZVByb3BzIH0gZnJvbSBcIi4vc3JjL2RyYXdlci1zdWItdGl0bGVcIjtcbmV4cG9ydCB7IEV4cGFuZGFibGVEcmF3ZXJJdGVtLCB0eXBlIEV4cGFuZGFibGVEcmF3ZXJJdGVtUHJvcHMgfSBmcm9tIFwiLi9zcmMvZXhwYW5kYWJsZS1kcmF3ZXItaXRlbVwiO1xuZXhwb3J0IHsgRHJhd2VySXRlbUxhYmVscywgdHlwZSBEcmF3ZXJJdGVtTGFiZWxzUHJvcHMgfSBmcm9tIFwiLi9zcmMvZHJhd2VyLWl0ZW0tbGFiZWxzXCI7XG5leHBvcnQgeyBOb0l0ZW1zRGV0YWlsSXRlbSwgdHlwZSBOb0l0ZW1zRGV0YWlsSXRlbVByb3BzIH0gZnJvbSBcIi4vc3JjL25vLWl0ZW1zLWRldGFpbC1pdGVtXCI7XG5leHBvcnQgeyBDb25kaXRpb25CYWRnZSwgdHlwZSBDb25kaXRpb25CYWRnZVByb3BzIH0gZnJvbSBcIi4vc3JjL2NvbmRpdGlvbi1iYWRnZVwiO1xuZXhwb3J0IHsgQ29uZGl0aW9uVG9vbHRpcENvbnRlbnQsIHR5cGUgQ29uZGl0aW9uVG9vbHRpcENvbnRlbnRQcm9wcyB9IGZyb20gXCIuL3NyYy9jb25kaXRpb24tdG9vbHRpcC1jb250ZW50XCI7XG5leHBvcnQgdHlwZSB7IENvbmRpdGlvbiB9IGZyb20gXCIuL3NyYy9jb25kaXRpb25cIjtcbiIsICJpbXBvcnQgeyBDaGlsZHJlbiB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgRGl2LCB0eXBlIERpdlByb3BzLCBTcGFuLCB0eXBlIFNwYW5Qcm9wcyB9IGZyb20gXCJAazhzbGVucy9lbGVtZW50LWNvbXBvbmVudHNcIjtcblxuLyoqIFRoZSBsb29rIGV2ZXJ5IHJvdyBvZiBhIHNlY3Rpb24gc2hhcmVzOiBpdHMgcGFkZGluZywgYmFja2dyb3VuZCBhbmQgdGhlIGxpbmUgdW5kZXIgaXQuICovXG5leHBvcnQgY29uc3QgRHJhd2VySXRlbVJvdyA9ICh7IGNoaWxkcmVuLCAuLi5yZXN0IH06IERpdlByb3BzKSA9PiAoXG4gIDxEaXZcbiAgICAkZmxleD17eyBkaXJlY3Rpb246IFwiaG9yaXpvbnRhbFwiLCB3cmFwOiB0cnVlIH19XG4gICAgJHBhZGRpbmc9e3sgdmVydGljYWw6IFwieHNcIiwgcmlnaHQ6IFwieHNcIiwgbGVmdDogXCJzXCIgfX1cbiAgICAkYmFja2dyb3VuZENvbG9yPVwiYmFja2dyb3VuZFByaW1hcnlcIlxuICAgICRib3JkZXI9e3sgYm90dG9tOiB7IHdpZHRoOiBcInh4c1wiLCBjb2xvcjogXCJncmV5NjBcIiB9LCBleGNlcHRMYXN0OiB0cnVlIH19XG4gICAgey4uLnJlc3R9XG4gID5cbiAgICB7Y2hpbGRyZW59XG4gIDwvRGl2PlxuKTtcblxuLyoqIFRoZSBuYW1lIGNvbHVtbiBvZiBhIHJvdzogYXQgbGVhc3QgYSBzaGFyZSBvZiB0aGUgcm93LCB3aWRlciBpZiB0aGUgbmFtZSBuZWVkcyBpdC4gKi9cbmV4cG9ydCBjb25zdCBEcmF3ZXJJdGVtTmFtZSA9ICh7IGNoaWxkcmVuLCAuLi5yZXN0IH06IFNwYW5Qcm9wcykgPT4gKFxuICA8U3BhblxuICAgIGRhdGEtZHJhd2VyLWl0ZW0tbmFtZS10ZXN0XG4gICAgJGZsZXhDaGlsZD1cImZpeGVkXCJcbiAgICAkd2lkdGg9e3sgbWluOiBcIjMwJVwiIH19XG4gICAgJHBhZGRpbmc9e3sgcmlnaHQ6IFwieHNcIiB9fVxuICAgICRvdmVyZmxvdz1cImhpZGRlblwiXG4gICAgJGZvbnQ9e3sgdGV4dE92ZXJmbG93OiBcImVsbGlwc2lzXCIgfX1cbiAgICB7Li4ucmVzdH1cbiAgPlxuICAgIHtjaGlsZHJlbn1cbiAgPC9TcGFuPlxuKTtcblxuZXhwb3J0IGludGVyZmFjZSBEcmF3ZXJJdGVtVmFsdWVQcm9wcyBleHRlbmRzIFNwYW5Qcm9wcyB7XG4gIC8qKiBMYXlzIHRoZSB2YWx1ZSBvdXQgYXMgYSB3cmFwcGluZyByb3cgb2YgbGFiZWxzLiAqL1xuICBsYWJlbHNPbmx5PzogYm9vbGVhbjtcbn1cblxuLyoqIFRoZSB2YWx1ZSBjb2x1bW4gb2YgYSByb3csIHRha2luZyB0aGUgcmVzdCBvZiBpdDsgYSBkYXNoIHdoZW4gdGhlcmUgaXMgbm90aGluZyB0byBzaG93LiAqL1xuZXhwb3J0IGNvbnN0IERyYXdlckl0ZW1WYWx1ZSA9ICh7IGxhYmVsc09ubHksIGNoaWxkcmVuLCAuLi5yZXN0IH06IERyYXdlckl0ZW1WYWx1ZVByb3BzKSA9PiAoXG4gIDxTcGFuXG4gICAgZGF0YS1kcmF3ZXItaXRlbS12YWx1ZS10ZXN0XG4gICAgJGZsZXhDaGlsZD1cInNocmlua2FibGVcIlxuICAgICRmb250PXt7IGZvcmNlV3JhcDogdHJ1ZSB9fVxuICAgICRmbGV4PXtsYWJlbHNPbmx5ID8geyBkaXJlY3Rpb246IFwiaG9yaXpvbnRhbFwiLCB3cmFwOiB0cnVlLCBnYXA6IFwieHNcIiB9IDogdW5kZWZpbmVkfVxuICAgIHsuLi5yZXN0fVxuICA+XG4gICAge2hhc0NvbnRlbnQoY2hpbGRyZW4pID8gY2hpbGRyZW4gOiBcIlx1MjAxNFwifVxuICA8L1NwYW4+XG4pO1xuXG5jb25zdCBoYXNDb250ZW50ID0gKGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGUpID0+XG4gIENoaWxkcmVuLnRvQXJyYXkoY2hpbGRyZW4pLnNvbWUoKGNoaWxkKSA9PiBjaGlsZCAhPT0gXCJcIiAmJiBjaGlsZCAhPT0gbnVsbCAmJiBjaGlsZCAhPT0gdW5kZWZpbmVkKTtcbiIsICJpbXBvcnQgdHlwZSB7IERpdlByb3BzIH0gZnJvbSBcIkBrOHNsZW5zL2VsZW1lbnQtY29tcG9uZW50c1wiO1xuaW1wb3J0IHsgRHJhd2VySXRlbU5hbWUsIERyYXdlckl0ZW1Sb3csIERyYXdlckl0ZW1WYWx1ZSB9IGZyb20gXCIuL2RyYXdlci1pdGVtLXBhcnRzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHJhd2VySXRlbVByb3BzIGV4dGVuZHMgRGl2UHJvcHMge1xuICAvKiogV2hhdCB0aGUgcm93IGlzIGFib3V0LCBzaG93biBpbiB0aGUgbmFtZSBjb2x1bW4uICovXG4gIG5hbWU6IFJlYWN0LlJlYWN0Tm9kZTtcbiAgLyoqIExheXMgdGhlIHZhbHVlIG91dCBhcyBhIHJvdyBvZiBsYWJlbHMuICovXG4gIGxhYmVsc09ubHk/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEEgcm93IG9mIGEgZGV0YWlscyBwYW5lbCBzZWN0aW9uOiBhIG5hbWUgYW5kLCBuZXh0IHRvIGl0LCBhIHZhbHVlLiBUaGUgcm93XG4gKiBpcyBhIGBEaXZgLCBzbyBpdCB0YWtlcyB0aGUgYCRwcm9wc2Agb2Ygb25lIGFuZCBwYXNzZXMgZXZlcnl0aGluZyBlbHNlIHRvXG4gKiB0aGUgZWxlbWVudCBpdCByZW5kZXJzLlxuICovXG5leHBvcnQgY29uc3QgRHJhd2VySXRlbSA9ICh7IG5hbWUsIGxhYmVsc09ubHksIGNoaWxkcmVuLCAuLi5yZXN0IH06IERyYXdlckl0ZW1Qcm9wcykgPT4gKFxuICA8RHJhd2VySXRlbVJvdyB7Li4ucmVzdH0+XG4gICAgPERyYXdlckl0ZW1OYW1lPntuYW1lfTwvRHJhd2VySXRlbU5hbWU+XG4gICAgPERyYXdlckl0ZW1WYWx1ZSBsYWJlbHNPbmx5PXtsYWJlbHNPbmx5fT57Y2hpbGRyZW59PC9EcmF3ZXJJdGVtVmFsdWU+XG4gIDwvRHJhd2VySXRlbVJvdz5cbik7XG4iLCAiaW1wb3J0IHsgRGl2LCB0eXBlIERpdlByb3BzIH0gZnJvbSBcIkBrOHNsZW5zL2VsZW1lbnQtY29tcG9uZW50c1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIERyYXdlclN1YlRpdGxlUHJvcHMgZXh0ZW5kcyBEaXZQcm9wcyB7fVxuXG4vKipcbiAqIEEgaGVhZGluZyBpbnNpZGUgYSBkZXRhaWxzIHBhbmVsIHNlY3Rpb24sIGZvciBncm91cGluZyBpdHMgcm93cy5cbiAqL1xuZXhwb3J0IGNvbnN0IERyYXdlclN1YlRpdGxlID0gKHsgY2hpbGRyZW4sIC4uLnJlc3QgfTogRHJhd2VyU3ViVGl0bGVQcm9wcykgPT4gKFxuICA8RGl2ICRwYWRkaW5nPVwic1wiICRmb250PXt7IGJvbGQ6IHRydWUgfX0gey4uLnJlc3R9PlxuICAgIHtjaGlsZHJlbn1cbiAgPC9EaXY+XG4pO1xuIiwgImltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBCdXR0b24sIHR5cGUgRGl2UHJvcHMgfSBmcm9tIFwiQGs4c2xlbnMvZWxlbWVudC1jb21wb25lbnRzXCI7XG5pbXBvcnQgeyBJY29uIH0gZnJvbSBcIkBrOHNsZW5zL2ljb25cIjtcbmltcG9ydCB7IERyYXdlckl0ZW1OYW1lLCBEcmF3ZXJJdGVtUm93LCBEcmF3ZXJJdGVtVmFsdWUgfSBmcm9tIFwiLi9kcmF3ZXItaXRlbS1wYXJ0c1wiO1xuXG50eXBlIFRlc3RBdHRyaWJ1dGVWYWx1ZSA9IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkO1xuXG5leHBvcnQgaW50ZXJmYWNlIEV4cGFuZGFibGVEcmF3ZXJJdGVtUHJvcHMgZXh0ZW5kcyBEaXZQcm9wcyB7XG4gIC8qKiBXaGF0IHRoZSByb3cgaXMgYWJvdXQsIHNob3duIGluIHRoZSBuYW1lIGNvbHVtbiBhbmQgb24gdGhlIHRvZ2dsZS4gKi9cbiAgbmFtZTogUmVhY3QuUmVhY3ROb2RlO1xuICAvKiogVGhlIHZhbHVlLCBzaG93biB3aGVuIHRoZSByb3cgaXMgZXhwYW5kZWQgb3IgY2Fubm90IGNvbGxhcHNlLiAqL1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlO1xuICAvKiogV2hhdCBzdGFuZHMgaW4gZm9yIHRoZSB2YWx1ZSB3aGlsZSB0aGUgcm93IGlzIGNvbGxhcHNlZC4gKi9cbiAgY29sbGFwc2VkQ29udGVudDogUmVhY3QuUmVhY3ROb2RlO1xuICAvKiogV2hldGhlciB0aGUgcm93IGNvbGxhcHNlcyBhdCBhbGwuIEEgcm93IHRoYXQgZG9lcyBub3Qgc2hvd3MgaXRzIGNoaWxkcmVuLiAqL1xuICBpc0V4cGFuZGFibGU/OiBib29sZWFuO1xuICAvKiogR2l2ZSB0aGUgZXhwYW5kZWQgdmFsdWUgdGhlIHdob2xlIHdpZHRoIG9mIHRoZSByb3csIGJlbG93IHRoZSBuYW1lLiAqL1xuICBmdWxsV2lkdGhDb250ZW50PzogYm9vbGVhbjtcbiAgLyoqIExheXMgdGhlIHZhbHVlIG91dCBhcyBhIHJvdyBvZiBsYWJlbHMuICovXG4gIGxhYmVsc09ubHk/OiBib29sZWFuO1xuICAvKipcbiAgICogV2hldGhlciB0aGUgcm93IGlzIGV4cGFuZGVkLiBMZWF2ZSBpdCBvdXQgYW5kIHRoZSByb3cgcmVtZW1iZXJzIGl0cyBvd25cbiAgICogc3RhdGU7IHBhc3MgaXQsIHRvZ2V0aGVyIHdpdGggYG9uVG9nZ2xlYCwgYW5kIHdob2V2ZXIgcmVuZGVycyB0aGUgcm93XG4gICAqIGRlY2lkZXMuIFN3aXRjaGluZyBiZXR3ZWVuIHRoZSB0d28gd2hpbGUgdGhlIHJvdyBpcyBtb3VudGVkIGlzIG5vdFxuICAgKiBzdXBwb3J0ZWQuXG4gICAqL1xuICBleHBhbmRlZD86IGJvb2xlYW47XG4gIC8qKiBDYWxsZWQgd2hlbiB0aGUgdG9nZ2xlIGlzIGNsaWNrZWQsIGluIGJvdGggbW9kZXMuICovXG4gIG9uVG9nZ2xlPzogKCkgPT4gdm9pZDtcbiAgLyoqIEF0dHJpYnV0ZXMgZm9yIHRoZSB0b2dnbGU7IGl0IGlzIGEgYEJ1dHRvbmAgb2YgYEBrOHNsZW5zL2VsZW1lbnQtY29tcG9uZW50c2AsIHNvIGRpc2FibGUgaXQgd2l0aCBgJGVuYWJsZWRgLiAqL1xuICBidXR0b25Qcm9wcz86IE9taXQ8UmVhY3QuQnV0dG9uSFRNTEF0dHJpYnV0ZXM8SFRNTEJ1dHRvbkVsZW1lbnQ+LCBcImRpc2FibGVkXCI+ICZcbiAgICBQYXJ0aWFsPFJlY29yZDxgZGF0YS0ke3N0cmluZ30tdGVzdGAsIFRlc3RBdHRyaWJ1dGVWYWx1ZT4+O1xufVxuXG4vKipcbiAqIEEgcm93IG9mIGEgZGV0YWlscyBwYW5lbCBzZWN0aW9uIHdob3NlIHZhbHVlIGNvbGxhcHNlcyB0byBhIHN1bW1hcnkgdW50aWxcbiAqIHRoZSB1c2VyIGV4cGFuZHMgaXQuIFVuY29udHJvbGxlZCBieSBkZWZhdWx0OiB0aGUgcm93IGtlZXBzIGl0cyBvd24gc3RhdGUuXG4gKi9cbmV4cG9ydCBjb25zdCBFeHBhbmRhYmxlRHJhd2VySXRlbSA9ICh7XG4gIG5hbWUsXG4gIGNoaWxkcmVuLFxuICBjb2xsYXBzZWRDb250ZW50LFxuICBpc0V4cGFuZGFibGUgPSB0cnVlLFxuICBmdWxsV2lkdGhDb250ZW50LFxuICBsYWJlbHNPbmx5LFxuICBidXR0b25Qcm9wcyA9IHt9LFxuICBleHBhbmRlZDogY29udHJvbGxlZEV4cGFuZGVkLFxuICBvblRvZ2dsZSxcbiAgLi4ucmVzdFxufTogRXhwYW5kYWJsZURyYXdlckl0ZW1Qcm9wcykgPT4ge1xuICBjb25zdCBbb3duRXhwYW5kZWQsIHNldE93bkV4cGFuZGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgaXNDb250cm9sbGVkID0gY29udHJvbGxlZEV4cGFuZGVkICE9PSB1bmRlZmluZWQ7XG4gIGNvbnN0IGV4cGFuZGVkID0gaXNDb250cm9sbGVkID8gY29udHJvbGxlZEV4cGFuZGVkIDogb3duRXhwYW5kZWQ7XG5cbiAgY29uc3QgdG9nZ2xlID0gKCkgPT4ge1xuICAgIG9uVG9nZ2xlPy4oKTtcblxuICAgIGlmICghaXNDb250cm9sbGVkKSB7XG4gICAgICBzZXRPd25FeHBhbmRlZCgodmFsdWUpID0+ICF2YWx1ZSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGNvbnRlbnQgPSAhaXNFeHBhbmRhYmxlIHx8IGV4cGFuZGVkID8gY2hpbGRyZW4gOiBjb2xsYXBzZWRDb250ZW50O1xuXG4gIHJldHVybiAoXG4gICAgPERyYXdlckl0ZW1Sb3cgey4uLnJlc3R9PlxuICAgICAge2lzRXhwYW5kYWJsZSA/IChcbiAgICAgICAgPEJ1dHRvblxuICAgICAgICAgIHsuLi5idXR0b25Qcm9wc31cbiAgICAgICAgICAkb25DbGljaz17dG9nZ2xlfVxuICAgICAgICAgICRmbGV4Q2hpbGQ9XCJmaXhlZFwiXG4gICAgICAgICAgJHdpZHRoPXt7IG1pbjogXCIzMCVcIiB9fVxuICAgICAgICAgICRwYWRkaW5nPXt7IHJpZ2h0OiBcInhzXCIgfX1cbiAgICAgICAgICAkdGV4dEFsaWduPVwibGVmdFwiXG4gICAgICAgICAgJGZsZXg9e3sgZGlyZWN0aW9uOiBcImhvcml6b250YWxcIiwgdmVydGljYWxBbGlnbjogXCJjZW50ZXJcIiwgZ2FwOiBcInh4c1wiIH19XG4gICAgICAgID5cbiAgICAgICAgICB7bmFtZX1cbiAgICAgICAgICA8SWNvbiBtYXRlcmlhbD17ZXhwYW5kZWQgPyBcInVuZm9sZF9sZXNzXCIgOiBcInVuZm9sZF9tb3JlXCJ9IHNtYWxsZXN0IC8+XG4gICAgICAgIDwvQnV0dG9uPlxuICAgICAgKSA6IChcbiAgICAgICAgPERyYXdlckl0ZW1OYW1lPntuYW1lfTwvRHJhd2VySXRlbU5hbWU+XG4gICAgICApfVxuICAgICAgPERyYXdlckl0ZW1WYWx1ZSBsYWJlbHNPbmx5PXtsYWJlbHNPbmx5fSAkd2lkdGg9e2Z1bGxXaWR0aENvbnRlbnQgJiYgZXhwYW5kZWQgPyBcImZ1bGxcIiA6IHVuZGVmaW5lZH0+XG4gICAgICAgIHtjb250ZW50fVxuICAgICAgPC9EcmF3ZXJJdGVtVmFsdWU+XG4gICAgPC9EcmF3ZXJJdGVtUm93PlxuICApO1xufTtcbiIsICJpbXBvcnQgeyBCYWRnZSB9IGZyb20gXCJAazhzbGVucy9iYWRnZVwiO1xuaW1wb3J0IHsgRXhwYW5kYWJsZURyYXdlckl0ZW0sIHR5cGUgRXhwYW5kYWJsZURyYXdlckl0ZW1Qcm9wcyB9IGZyb20gXCIuL2V4cGFuZGFibGUtZHJhd2VyLWl0ZW1cIjtcblxuY29uc3QgZXhwYW5kYWJsZUxhYmVsc0NoYXJMZW5ndGhMaW1pdCA9IDQwO1xuXG5leHBvcnQgaW50ZXJmYWNlIERyYXdlckl0ZW1MYWJlbHNQcm9wc1xuICBleHRlbmRzIE9taXQ8RXhwYW5kYWJsZURyYXdlckl0ZW1Qcm9wcywgXCJjaGlsZHJlblwiIHwgXCJjb2xsYXBzZWRDb250ZW50XCIgfCBcImlzRXhwYW5kYWJsZVwiIHwgXCJsYWJlbHNPbmx5XCI+IHtcbiAgLyoqIFRoZSBsYWJlbHMsIGVpdGhlciBhcyBgbmFtZT12YWx1ZWAgc3RyaW5ncyBvciBhcyB0aGUgbWFwIGEgcmVzb3VyY2UgY2Fycmllcy4gKi9cbiAgbGFiZWxzOiBzdHJpbmdbXSB8IFBhcnRpYWw8UmVjb3JkPHN0cmluZywgc3RyaW5nPj47XG59XG5cbmNvbnN0IHN0cmluZ2lmeUxhYmVscyA9IChsYWJlbHM6IFBhcnRpYWw8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4pID0+XG4gIE9iamVjdC5lbnRyaWVzKGxhYmVscykubWFwKChbbmFtZSwgdmFsdWVdKSA9PiBgJHtuYW1lfT0ke3ZhbHVlfWApO1xuXG4vKipcbiAqIEEgcm93IG9mIGEgZGV0YWlscyBwYW5lbCBzZWN0aW9uIHNob3dpbmcgbGFiZWxzIGFzIGJhZGdlcy4gTWFueSBsb25nIGxhYmVsc1xuICogY29sbGFwc2UgdG8gdGhlaXIgY291bnQgdW50aWwgZXhwYW5kZWQ7IHRoZSByb3cgcmVtZW1iZXJzIHRoZSBleHBhbnNpb25cbiAqIGl0c2VsZiB1bmxlc3MgYGV4cGFuZGVkYCBhbmQgYG9uVG9nZ2xlYCBhcmUgZ2l2ZW4uIFJlbmRlcnMgbm90aGluZyB3aXRob3V0XG4gKiBsYWJlbHMuXG4gKi9cbmV4cG9ydCBjb25zdCBEcmF3ZXJJdGVtTGFiZWxzID0gKHsgbGFiZWxzLCBuYW1lLCAuLi5yZXN0IH06IERyYXdlckl0ZW1MYWJlbHNQcm9wcykgPT4ge1xuICBpZiAoIWxhYmVscyB8fCB0eXBlb2YgbGFiZWxzICE9PSBcIm9iamVjdFwiKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBsYWJlbFN0cmluZ3MgPSBBcnJheS5pc0FycmF5KGxhYmVscykgPyBsYWJlbHMgOiBzdHJpbmdpZnlMYWJlbHMobGFiZWxzKTtcblxuICBpZiAobGFiZWxTdHJpbmdzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgaXNFeHBhbmRhYmxlID0gbGFiZWxTdHJpbmdzLmxlbmd0aCA+IDEgJiYgbGFiZWxTdHJpbmdzLmpvaW4oKS5sZW5ndGggPiBleHBhbmRhYmxlTGFiZWxzQ2hhckxlbmd0aExpbWl0O1xuXG4gIHJldHVybiAoXG4gICAgPEV4cGFuZGFibGVEcmF3ZXJJdGVtXG4gICAgICB7Li4ucmVzdH1cbiAgICAgIG5hbWU9e25hbWV9XG4gICAgICBsYWJlbHNPbmx5XG4gICAgICBjb2xsYXBzZWRDb250ZW50PXtgJHtsYWJlbFN0cmluZ3MubGVuZ3RofSAke25hbWV9YH1cbiAgICAgIGlzRXhwYW5kYWJsZT17aXNFeHBhbmRhYmxlfVxuICAgID5cbiAgICAgIHtsYWJlbFN0cmluZ3MubWFwKChsYWJlbCkgPT4gKFxuICAgICAgICA8QmFkZ2Uga2V5PXtsYWJlbH0gbGFiZWw9e2xhYmVsfSB0aXRsZT17bGFiZWx9IC8+XG4gICAgICApKX1cbiAgICA8L0V4cGFuZGFibGVEcmF3ZXJJdGVtPlxuICApO1xufTtcbiIsICJpbXBvcnQgeyBEaXYsIHR5cGUgRGl2UHJvcHMgfSBmcm9tIFwiQGs4c2xlbnMvZWxlbWVudC1jb21wb25lbnRzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTm9JdGVtc0RldGFpbEl0ZW1Qcm9wcyBleHRlbmRzIERpdlByb3BzIHt9XG5cbi8qKlxuICogV2hhdCBhIGRldGFpbHMgcGFuZWwgc2VjdGlvbiBzaG93cyB3aGVuIGl0IGhhcyBub3RoaW5nIHRvIGxpc3QsIHBhZGRlZCBsaWtlXG4gKiB0aGUgcm93cyBpdCBzdGFuZHMgaW4gZm9yLlxuICovXG5leHBvcnQgY29uc3QgTm9JdGVtc0RldGFpbEl0ZW0gPSAoeyBjaGlsZHJlbiwgLi4ucmVzdCB9OiBOb0l0ZW1zRGV0YWlsSXRlbVByb3BzKSA9PiAoXG4gIDxEaXYgJHBhZGRpbmc9e3sgdmVydGljYWw6IFwieHNcIiwgcmlnaHQ6IFwieHNcIiwgbGVmdDogXCJzXCIgfX0gey4uLnJlc3R9PlxuICAgIHtjaGlsZHJlbn1cbiAgPC9EaXY+XG4pO1xuIiwgImltcG9ydCB7IEJhZGdlLCB0eXBlIEJhZGdlUHJvcHMgfSBmcm9tIFwiQGs4c2xlbnMvYmFkZ2VcIjtcbmltcG9ydCB7IHR5cGUgQmFja2dyb3VuZENvbG9yLCBnZXRUb29sdGlwUHJvcHMgfSBmcm9tIFwiQGs4c2xlbnMvZWxlbWVudC1jb21wb25lbnRzXCI7XG5pbXBvcnQgdHlwZSB7IENvbmRpdGlvbiB9IGZyb20gXCIuL2NvbmRpdGlvblwiO1xuaW1wb3J0IHsgQ29uZGl0aW9uVG9vbHRpcENvbnRlbnQgfSBmcm9tIFwiLi9jb25kaXRpb24tdG9vbHRpcC1jb250ZW50XCI7XG5cbmNvbnN0IGNvbmRpdGlvblR5cGVUb0NvbG9yOiBSZWNvcmQ8c3RyaW5nLCBCYWNrZ3JvdW5kQ29sb3I+ID0ge1xuICBBdmFpbGFibGU6IFwic3VjY2Vzc1wiLFxuICBBY2NlcHRlZDogXCJzdWNjZXNzXCIsXG4gIFJlYWR5OiBcInN1Y2Nlc3NcIixcbiAgUHJvZ3Jlc3Npbmc6IFwibm90aWNlXCIsXG4gIFByb2dyYW1tZWQ6IFwic3VjY2Vzc1wiLFxuICBSZXNvbHZlZFJlZnM6IFwic3VjY2Vzc1wiLFxuICBSZWNvbmNpbGVkOiBcInN1Y2Nlc3NcIixcbiAgUmVwbGljYUZhaWx1cmU6IFwiY3JpdGljYWxcIixcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29uZGl0aW9uQmFkZ2VQcm9wcyBleHRlbmRzIEJhZGdlUHJvcHMge1xuICAvKiogVGhlIGNvbmRpdGlvbiB0byBzaG93OyBpdHMgdHlwZSBpcyB0aGUgbGFiZWwgdW5sZXNzIG9uZSBpcyBnaXZlbi4gKi9cbiAgY29uZGl0aW9uOiBDb25kaXRpb247XG59XG5cbi8qKlxuICogQSBiYWRnZSBmb3Igb25lIEt1YmVybmV0ZXMgY29uZGl0aW9uOiBjb2xvdXJlZCBieSB3aGF0IGEgdHJ1ZSBjb25kaXRpb24gb2ZcbiAqIHRoYXQgdHlwZSBtZWFucywgZGltbWVkIHdoaWxlIHRoZSBjb25kaXRpb24gaXMgbm90IHRydWUsIHdpdGggdGhlXG4gKiBjb25kaXRpb24ncyBtZXNzYWdlIGFzIGl0cyB0b29sdGlwLlxuICovXG5leHBvcnQgY29uc3QgQ29uZGl0aW9uQmFkZ2UgPSAoeyBjb25kaXRpb24sIGxhYmVsLCAuLi5yZXN0IH06IENvbmRpdGlvbkJhZGdlUHJvcHMpID0+IHtcbiAgY29uc3QgeyB0eXBlLCBzdGF0dXMgfSA9IGNvbmRpdGlvbjtcbiAgY29uc3QgY29sb3IgPSBzdGF0dXMgPT09IFwiVHJ1ZVwiID8gY29uZGl0aW9uVHlwZVRvQ29sb3JbdHlwZV0gOiB1bmRlZmluZWQ7XG5cbiAgcmV0dXJuIChcbiAgICA8QmFkZ2VcbiAgICAgIGxhYmVsPXtsYWJlbCA/PyB0eXBlfVxuICAgICAgJGRpc2FibGVkPXtzdGF0dXMgIT09IFwiVHJ1ZVwifVxuICAgICAgJGJhY2tncm91bmRDb2xvcj17Y29sb3J9XG4gICAgICAkY29sb3I9e2NvbG9yID8gXCJ3aGl0ZVwiIDogdW5kZWZpbmVkfVxuICAgICAgJHRvb2x0aXA9e2dldFRvb2x0aXBQcm9wcyh7IENvbnRlbnQ6IENvbmRpdGlvblRvb2x0aXBDb250ZW50LCBjb250ZW50UHJvcHM6IHsgY29uZGl0aW9uIH0gfSl9XG4gICAgICB7Li4ucmVzdH1cbiAgICAvPlxuICApO1xufTtcbiIsICJpbXBvcnQgdHlwZSB7IENvbmRpdGlvbiB9IGZyb20gXCIuL2NvbmRpdGlvblwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbmRpdGlvblRvb2x0aXBDb250ZW50UHJvcHMge1xuICByZWFkb25seSBjb25kaXRpb246IENvbmRpdGlvbjtcbn1cblxuLyoqXG4gKiBXaGF0IHRoZSB0b29sdGlwIG9mIGEgY29uZGl0aW9uIGJhZGdlIHNheXM6IHRoZSBjb25kaXRpb24ncyBtZXNzYWdlIGFuZCxcbiAqIHdoZW4ga25vd24sIHdoZW4gaXQgbGFzdCBjaGFuZ2VkLlxuICovXG5leHBvcnQgY29uc3QgQ29uZGl0aW9uVG9vbHRpcENvbnRlbnQgPSAoeyBjb25kaXRpb24gfTogQ29uZGl0aW9uVG9vbHRpcENvbnRlbnRQcm9wcykgPT4gKFxuICA8PlxuICAgIDxwPntjb25kaXRpb24ubWVzc2FnZX08L3A+XG4gICAge2NvbmRpdGlvbi5sYXN0VHJhbnNpdGlvblRpbWUgPyA8cD57YExhc3QgdHJhbnNpdGlvbiB0aW1lOiAke2NvbmRpdGlvbi5sYXN0VHJhbnNpdGlvblRpbWV9YH08L3A+IDogbnVsbH1cbiAgPC8+XG4pO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7QUNBQSxtQkFBeUI7QUFDekIsZ0NBQXlEO0FBSXZEO0FBREssSUFBTSxnQkFBZ0IsQ0FBQyxFQUFFLFVBQVUsR0FBRyxLQUFLLE1BQ2hEO0FBQUEsRUFBQztBQUFBO0FBQUEsSUFDQyxPQUFPLEVBQUUsV0FBVyxjQUFjLE1BQU0sS0FBSztBQUFBLElBQzdDLFVBQVUsRUFBRSxVQUFVLE1BQU0sT0FBTyxNQUFNLE1BQU0sSUFBSTtBQUFBLElBQ25ELGtCQUFpQjtBQUFBLElBQ2pCLFNBQVMsRUFBRSxRQUFRLEVBQUUsT0FBTyxPQUFPLE9BQU8s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QkFBMEIsQ0FBQyxFQUFFLFVBQVUsTUFDbEQsOEVBQ0U7QUFBQSwrQ0FBQyxPQUFHLG9CQUFVLFNBQVE7QUFBQSxFQUNyQixVQUFVLHFCQUFxQiw2Q0FBQyxPQUFHLG1DQUF5QixVQUFVLGtCQUFrQixJQUFHLElBQU87QUFBQSxHQUNyRzs7O0FEaUJFLElBQUFDLHNCQUFBO0FBMUJKLElBQU0sdUJBQXdEO0FBQUEsRUFDNUQsV0FBVztBQUFBLEVBQ1gsVUFBVTtBQUFBLEVBQ1YsT0FBTztBQUFBLEVBQ1AsYUFBYTtBQUFBLEVBQ2IsWUFBWTtBQUFBLEVBQ1osY0FBYztBQUFBLEVBQ2QsWUFBWTtBQUFBLEVBQ1osZ0JBQWdCO0FBQ2xCO0FBWU8sSUFBTSxpQkFBaUIsQ0FBQyxFQUFFLFdBQVcsT0FBTyxHQUFHLEtBQUssTUFBMkI7QUFDcEYsUUFBTSxFQUFFLE1BQU0sT0FBTyxJQUFJO0FBQ3pCLFFBQU0sUUFBUSxXQUFXLFNBQVMscUJBQXFCLElBQUksSUFBSTtBQUUvRCxTQUNFO0FBQUEsSUFBQztBQUFBO0FBQUEsTUFDQyxPQUFPLFNBQVM7QUFBQSxNQUNoQixXQUFXLFdBQVc7QUFBQSxNQUN0QixrQkFBa0I7QUFBQSxNQUNsQixRQUFRLFFBQVEsVUFBVTtBQUFBLE1BQzFCLGNBQVUsNENBQWdCLEVBQUUsU0FBUyx5QkFBeUIsY0FBYyxFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQUEsTUFDMUYsR0FBRztBQUFBO0FBQUEsRUFDTjtBQUVKOyIsCiAgIm5hbWVzIjogWyJpbXBvcnRfanN4X3J1bnRpbWUiLCAiaW1wb3J0X2VsZW1lbnRfY29tcG9uZW50cyIsICJpbXBvcnRfanN4X3J1bnRpbWUiLCAiaW1wb3J0X3JlYWN0IiwgImltcG9ydF9lbGVtZW50X2NvbXBvbmVudHMiLCAiaW1wb3J0X2pzeF9ydW50aW1lIiwgImltcG9ydF9qc3hfcnVudGltZSIsICJpbXBvcnRfZWxlbWVudF9jb21wb25lbnRzIiwgImltcG9ydF9qc3hfcnVudGltZSIsICJpbXBvcnRfYmFkZ2UiLCAiaW1wb3J0X2VsZW1lbnRfY29tcG9uZW50cyIsICJpbXBvcnRfanN4X3J1bnRpbWUiLCAiaW1wb3J0X2pzeF9ydW50aW1lIl0KfQo=
@@ -0,0 +1,13 @@
1
+ import { type BadgeProps } from "@k8slens/badge";
2
+ import type { Condition } from "./condition";
3
+ export interface ConditionBadgeProps extends BadgeProps {
4
+ /** The condition to show; its type is the label unless one is given. */
5
+ condition: Condition;
6
+ }
7
+ /**
8
+ * A badge for one Kubernetes condition: coloured by what a true condition of
9
+ * that type means, dimmed while the condition is not true, with the
10
+ * condition's message as its tooltip.
11
+ */
12
+ export declare const ConditionBadge: ({ condition, label, ...rest }: ConditionBadgeProps) => import("react/jsx-runtime").JSX.Element;
13
+ //# sourceMappingURL=condition-badge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"condition-badge.d.ts","sourceRoot":"","sources":["../../src/condition-badge.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAExD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAc7C,MAAM,WAAW,mBAAoB,SAAQ,UAAU;IACrD,wEAAwE;IACxE,SAAS,EAAE,SAAS,CAAC;CACtB;AAED;;;;GAIG;AACH,eAAO,MAAM,cAAc,kCAAmC,mBAAmB,4CAchF,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { Condition } from "./condition";
2
+ export interface ConditionTooltipContentProps {
3
+ readonly condition: Condition;
4
+ }
5
+ /**
6
+ * What the tooltip of a condition badge says: the condition's message and,
7
+ * when known, when it last changed.
8
+ */
9
+ export declare const ConditionTooltipContent: ({ condition }: ConditionTooltipContentProps) => import("react/jsx-runtime").JSX.Element;
10
+ //# sourceMappingURL=condition-tooltip-content.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"condition-tooltip-content.d.ts","sourceRoot":"","sources":["../../src/condition-tooltip-content.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;CAC/B;AAED;;;GAGG;AACH,eAAO,MAAM,uBAAuB,kBAAmB,4BAA4B,4CAKlF,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * What the condition badge reads of a Kubernetes condition. Any entry of a
3
+ * resource's `status.conditions` qualifies, whichever API version typed it.
4
+ */
5
+ export interface Condition {
6
+ readonly type: string;
7
+ readonly status: string;
8
+ readonly message?: string;
9
+ readonly reason?: string;
10
+ readonly lastTransitionTime?: string;
11
+ }
12
+ //# sourceMappingURL=condition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"condition.d.ts","sourceRoot":"","sources":["../../src/condition.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;CACtC"}
@@ -0,0 +1,13 @@
1
+ import { type ExpandableDrawerItemProps } from "./expandable-drawer-item";
2
+ export interface DrawerItemLabelsProps extends Omit<ExpandableDrawerItemProps, "children" | "collapsedContent" | "isExpandable" | "labelsOnly"> {
3
+ /** The labels, either as `name=value` strings or as the map a resource carries. */
4
+ labels: string[] | Partial<Record<string, string>>;
5
+ }
6
+ /**
7
+ * A row of a details panel section showing labels as badges. Many long labels
8
+ * collapse to their count until expanded; the row remembers the expansion
9
+ * itself unless `expanded` and `onToggle` are given. Renders nothing without
10
+ * labels.
11
+ */
12
+ export declare const DrawerItemLabels: ({ labels, name, ...rest }: DrawerItemLabelsProps) => import("react/jsx-runtime").JSX.Element | null;
13
+ //# sourceMappingURL=drawer-item-labels.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drawer-item-labels.d.ts","sourceRoot":"","sources":["../../src/drawer-item-labels.tsx"],"names":[],"mappings":"AACA,OAAO,EAAwB,KAAK,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAIhG,MAAM,WAAW,qBACf,SAAQ,IAAI,CAAC,yBAAyB,EAAE,UAAU,GAAG,kBAAkB,GAAG,cAAc,GAAG,YAAY,CAAC;IACxG,mFAAmF;IACnF,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACpD;AAKD;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,8BAA+B,qBAAqB,mDA0BhF,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { type DivProps, type SpanProps } from "@k8slens/element-components";
2
+ /** The look every row of a section shares: its padding, background and the line under it. */
3
+ export declare const DrawerItemRow: ({ children, ...rest }: DivProps) => import("react/jsx-runtime").JSX.Element;
4
+ /** The name column of a row: at least a share of the row, wider if the name needs it. */
5
+ export declare const DrawerItemName: ({ children, ...rest }: SpanProps) => import("react/jsx-runtime").JSX.Element;
6
+ export interface DrawerItemValueProps extends SpanProps {
7
+ /** Lays the value out as a wrapping row of labels. */
8
+ labelsOnly?: boolean;
9
+ }
10
+ /** The value column of a row, taking the rest of it; a dash when there is nothing to show. */
11
+ export declare const DrawerItemValue: ({ labelsOnly, children, ...rest }: DrawerItemValueProps) => import("react/jsx-runtime").JSX.Element;
12
+ //# sourceMappingURL=drawer-item-parts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drawer-item-parts.d.ts","sourceRoot":"","sources":["../../src/drawer-item-parts.tsx"],"names":[],"mappings":"AACA,OAAO,EAAO,KAAK,QAAQ,EAAQ,KAAK,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAEvF,6FAA6F;AAC7F,eAAO,MAAM,aAAa,0BAA2B,QAAQ,4CAU5D,CAAC;AAEF,yFAAyF;AACzF,eAAO,MAAM,cAAc,0BAA2B,SAAS,4CAY9D,CAAC;AAEF,MAAM,WAAW,oBAAqB,SAAQ,SAAS;IACrD,sDAAsD;IACtD,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,8FAA8F;AAC9F,eAAO,MAAM,eAAe,sCAAuC,oBAAoB,4CAUtF,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { DivProps } from "@k8slens/element-components";
2
+ export interface DrawerItemProps extends DivProps {
3
+ /** What the row is about, shown in the name column. */
4
+ name: React.ReactNode;
5
+ /** Lays the value out as a row of labels. */
6
+ labelsOnly?: boolean;
7
+ }
8
+ /**
9
+ * A row of a details panel section: a name and, next to it, a value. The row
10
+ * is a `Div`, so it takes the `$props` of one and passes everything else to
11
+ * the element it renders.
12
+ */
13
+ export declare const DrawerItem: ({ name, labelsOnly, children, ...rest }: DrawerItemProps) => import("react/jsx-runtime").JSX.Element;
14
+ //# sourceMappingURL=drawer-item.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drawer-item.d.ts","sourceRoot":"","sources":["../../src/drawer-item.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAG5D,MAAM,WAAW,eAAgB,SAAQ,QAAQ;IAC/C,uDAAuD;IACvD,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC;IACtB,6CAA6C;IAC7C,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;;GAIG;AACH,eAAO,MAAM,UAAU,4CAA6C,eAAe,4CAKlF,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { type DivProps } from "@k8slens/element-components";
2
+ export interface DrawerSubTitleProps extends DivProps {
3
+ }
4
+ /**
5
+ * A heading inside a details panel section, for grouping its rows.
6
+ */
7
+ export declare const DrawerSubTitle: ({ children, ...rest }: DrawerSubTitleProps) => import("react/jsx-runtime").JSX.Element;
8
+ //# sourceMappingURL=drawer-sub-title.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drawer-sub-title.d.ts","sourceRoot":"","sources":["../../src/drawer-sub-title.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAO,KAAK,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAEjE,MAAM,WAAW,mBAAoB,SAAQ,QAAQ;CAAG;AAExD;;GAEG;AACH,eAAO,MAAM,cAAc,0BAA2B,mBAAmB,4CAIxE,CAAC"}
@@ -0,0 +1,34 @@
1
+ import { type DivProps } from "@k8slens/element-components";
2
+ type TestAttributeValue = string | number | boolean | null | undefined;
3
+ export interface ExpandableDrawerItemProps extends DivProps {
4
+ /** What the row is about, shown in the name column and on the toggle. */
5
+ name: React.ReactNode;
6
+ /** The value, shown when the row is expanded or cannot collapse. */
7
+ children: React.ReactNode;
8
+ /** What stands in for the value while the row is collapsed. */
9
+ collapsedContent: React.ReactNode;
10
+ /** Whether the row collapses at all. A row that does not shows its children. */
11
+ isExpandable?: boolean;
12
+ /** Give the expanded value the whole width of the row, below the name. */
13
+ fullWidthContent?: boolean;
14
+ /** Lays the value out as a row of labels. */
15
+ labelsOnly?: boolean;
16
+ /**
17
+ * Whether the row is expanded. Leave it out and the row remembers its own
18
+ * state; pass it, together with `onToggle`, and whoever renders the row
19
+ * decides. Switching between the two while the row is mounted is not
20
+ * supported.
21
+ */
22
+ expanded?: boolean;
23
+ /** Called when the toggle is clicked, in both modes. */
24
+ onToggle?: () => void;
25
+ /** Attributes for the toggle; it is a `Button` of `@k8slens/element-components`, so disable it with `$enabled`. */
26
+ buttonProps?: Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, "disabled"> & Partial<Record<`data-${string}-test`, TestAttributeValue>>;
27
+ }
28
+ /**
29
+ * A row of a details panel section whose value collapses to a summary until
30
+ * the user expands it. Uncontrolled by default: the row keeps its own state.
31
+ */
32
+ export declare const ExpandableDrawerItem: ({ name, children, collapsedContent, isExpandable, fullWidthContent, labelsOnly, buttonProps, expanded: controlledExpanded, onToggle, ...rest }: ExpandableDrawerItemProps) => import("react/jsx-runtime").JSX.Element;
33
+ export {};
34
+ //# sourceMappingURL=expandable-drawer-item.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expandable-drawer-item.d.ts","sourceRoot":"","sources":["../../src/expandable-drawer-item.tsx"],"names":[],"mappings":"AACA,OAAO,EAAU,KAAK,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAIpE,KAAK,kBAAkB,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;AAEvE,MAAM,WAAW,yBAA0B,SAAQ,QAAQ;IACzD,yEAAyE;IACzE,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC;IACtB,oEAAoE;IACpE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,+DAA+D;IAC/D,gBAAgB,EAAE,KAAK,CAAC,SAAS,CAAC;IAClC,gFAAgF;IAChF,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,0EAA0E;IAC1E,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,6CAA6C;IAC7C,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,wDAAwD;IACxD,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,mHAAmH;IACnH,WAAW,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAAE,UAAU,CAAC,GAC3E,OAAO,CAAC,MAAM,CAAC,QAAQ,MAAM,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC;CAC9D;AAED;;;GAGG;AACH,eAAO,MAAM,oBAAoB,mJAW9B,yBAAyB,4CAsC3B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const getDiForTesting: () => import("@k8slens/injectable").DiContainer;
2
+ //# sourceMappingURL=get-di-for-testing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-di-for-testing.d.ts","sourceRoot":"","sources":["../../src/get-di-for-testing.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,eAAe,iDAO3B,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { type DivProps } from "@k8slens/element-components";
2
+ export interface NoItemsDetailItemProps extends DivProps {
3
+ }
4
+ /**
5
+ * What a details panel section shows when it has nothing to list, padded like
6
+ * the rows it stands in for.
7
+ */
8
+ export declare const NoItemsDetailItem: ({ children, ...rest }: NoItemsDetailItemProps) => import("react/jsx-runtime").JSX.Element;
9
+ //# sourceMappingURL=no-items-detail-item.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-items-detail-item.d.ts","sourceRoot":"","sources":["../../src/no-items-detail-item.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAO,KAAK,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAEjE,MAAM,WAAW,sBAAuB,SAAQ,QAAQ;CAAG;AAE3D;;;GAGG;AACH,eAAO,MAAM,iBAAiB,0BAA2B,sBAAsB,4CAI9E,CAAC"}