@cobaltcore-dev/aurora 0.3.0 → 0.4.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.
Files changed (134) hide show
  1. package/dist/client/{ContentHeader-B_PWrxbw.mjs → ContentHeader-BXZoN3B9.mjs} +16 -16
  2. package/dist/client/{ContentHeader-B_PWrxbw.mjs.map → ContentHeader-BXZoN3B9.mjs.map} +1 -1
  3. package/dist/client/{DeleteFlavorModal-BkPrQKyE.mjs → DeleteFlavorModal-BusYn32r.mjs} +152 -152
  4. package/dist/client/{DeleteFlavorModal-BkPrQKyE.mjs.map → DeleteFlavorModal-BusYn32r.mjs.map} +1 -1
  5. package/dist/client/{EditSecurityGroupModal-ad4uzlt0.mjs → EditSecurityGroupModal-DK3WYikA.mjs} +15 -15
  6. package/dist/client/{EditSecurityGroupModal-ad4uzlt0.mjs.map → EditSecurityGroupModal-DK3WYikA.mjs.map} +1 -1
  7. package/dist/client/FiltersInput-OVeIJzIo.mjs +81 -0
  8. package/dist/client/FiltersInput-OVeIJzIo.mjs.map +1 -0
  9. package/dist/client/{FloatingIpActionModals-lKMwLuL8.mjs → FloatingIpActionModals-Dok7fJss.mjs} +52 -52
  10. package/dist/client/{FloatingIpActionModals-lKMwLuL8.mjs.map → FloatingIpActionModals-Dok7fJss.mjs.map} +1 -1
  11. package/dist/client/{ImageToastNotifications--U13YiQ_.mjs → ImageToastNotifications-BG9LPnXf.mjs} +324 -324
  12. package/dist/client/{ImageToastNotifications--U13YiQ_.mjs.map → ImageToastNotifications-BG9LPnXf.mjs.map} +1 -1
  13. package/dist/client/ListToolbar-BojRTNbo.mjs +129 -0
  14. package/dist/client/ListToolbar-BojRTNbo.mjs.map +1 -0
  15. package/dist/client/{RouteError-iP1Vd6bY.mjs → RouteError-pDEWC_k7.mjs} +2 -2
  16. package/dist/client/{RouteError-iP1Vd6bY.mjs.map → RouteError-pDEWC_k7.mjs.map} +1 -1
  17. package/dist/client/SortInput-DXWSqSny.mjs +34 -0
  18. package/dist/client/SortInput-DXWSqSny.mjs.map +1 -0
  19. package/dist/client/{_flavorId-BaNXUJhA.mjs → _flavorId-BRonXvCo.mjs} +40 -40
  20. package/dist/client/{_flavorId-BaNXUJhA.mjs.map → _flavorId-BRonXvCo.mjs.map} +1 -1
  21. package/dist/client/{_flavorId-CnO76tuy.mjs → _flavorId-BoNcxYmF.mjs} +9 -9
  22. package/dist/client/{_flavorId-CnO76tuy.mjs.map → _flavorId-BoNcxYmF.mjs.map} +1 -1
  23. package/dist/client/{_floatingIpId-C8G20nNt.mjs → _floatingIpId-D33bOEmH.mjs} +2 -2
  24. package/dist/client/{_floatingIpId-C8G20nNt.mjs.map → _floatingIpId-D33bOEmH.mjs.map} +1 -1
  25. package/dist/client/_floatingIpId-DF_BSJN6.mjs +228 -0
  26. package/dist/client/{_floatingIpId-DdKnjdIV.mjs.map → _floatingIpId-DF_BSJN6.mjs.map} +1 -1
  27. package/dist/client/{_imageId-DdSbxFqG.mjs → _imageId-BL0I5_pv.mjs} +127 -127
  28. package/dist/client/{_imageId-DdSbxFqG.mjs.map → _imageId-BL0I5_pv.mjs.map} +1 -1
  29. package/dist/client/{_pcaId-DX_S-3hE.mjs → _pcaId-BYCoeK6_.mjs} +2 -2
  30. package/dist/client/{_pcaId-DX_S-3hE.mjs.map → _pcaId-BYCoeK6_.mjs.map} +1 -1
  31. package/dist/client/_pcaId-CbBhBrX1.mjs +466 -0
  32. package/dist/client/_pcaId-CbBhBrX1.mjs.map +1 -0
  33. package/dist/client/{_projectId-Dha4XqX4.mjs → _projectId-5NiasyXm.mjs} +3 -3
  34. package/dist/client/{_projectId-Dha4XqX4.mjs.map → _projectId-5NiasyXm.mjs.map} +1 -1
  35. package/dist/client/{_projectId-DYrcZ3E3.mjs → _projectId-BwLMEMGC.mjs} +3 -3
  36. package/dist/client/{_projectId-DYrcZ3E3.mjs.map → _projectId-BwLMEMGC.mjs.map} +1 -1
  37. package/dist/client/{_projectId-DsSVV2EA.mjs → _projectId-D35MN1kY.mjs} +70 -70
  38. package/dist/client/{_projectId-DsSVV2EA.mjs.map → _projectId-D35MN1kY.mjs.map} +1 -1
  39. package/dist/client/{_projectId-KH5si25Q.mjs → _projectId-OW2xkK43.mjs} +2 -2
  40. package/dist/client/{_projectId-KH5si25Q.mjs.map → _projectId-OW2xkK43.mjs.map} +1 -1
  41. package/dist/client/{_securityGroupId-DgaSqYex.mjs → _securityGroupId-B-Z-CzLp.mjs} +2 -2
  42. package/dist/client/{_securityGroupId-DgaSqYex.mjs.map → _securityGroupId-B-Z-CzLp.mjs.map} +1 -1
  43. package/dist/client/{_securityGroupId-O7FXfx0M.mjs → _securityGroupId-B1bOYRbX.mjs} +307 -307
  44. package/dist/client/{_securityGroupId-O7FXfx0M.mjs.map → _securityGroupId-B1bOYRbX.mjs.map} +1 -1
  45. package/dist/client/{about-DN8n8sN8.mjs → about-DLn1ShhF.mjs} +2 -2
  46. package/dist/client/{about-DN8n8sN8.mjs.map → about-DLn1ShhF.mjs.map} +1 -1
  47. package/dist/client/{build-CZRvXrAL.mjs → build-BJDfnAyi.mjs} +541 -537
  48. package/dist/client/{build-CZRvXrAL.mjs.map → build-BJDfnAyi.mjs.map} +1 -1
  49. package/dist/client/{buildFilterParams-ngVK3ybs.mjs → buildFilterParams-TeyosGyK.mjs} +1 -1
  50. package/dist/client/{buildFilterParams-ngVK3ybs.mjs.map → buildFilterParams-TeyosGyK.mjs.map} +1 -1
  51. package/dist/client/{constants-akdIBeTX.mjs → constants-B-P2r5F1.mjs} +11 -11
  52. package/dist/client/{constants-akdIBeTX.mjs.map → constants-B-P2r5F1.mjs.map} +1 -1
  53. package/dist/client/{containers-DmwhE9Uz.mjs → containers-BjWqjNOx.mjs} +2 -2
  54. package/dist/client/containers-BjWqjNOx.mjs.map +1 -0
  55. package/dist/client/{containers-Cs5vOeR2.mjs → containers-DsRWc1L5.mjs} +1 -1
  56. package/dist/client/containers-DsRWc1L5.mjs.map +1 -0
  57. package/dist/client/containers-J7WFA18U.mjs +3120 -0
  58. package/dist/client/containers-J7WFA18U.mjs.map +1 -0
  59. package/dist/client/{flavors-CY7A6--v.mjs → flavors-D8oElC2K.mjs} +2 -2
  60. package/dist/client/{flavors-CY7A6--v.mjs.map → flavors-D8oElC2K.mjs.map} +1 -1
  61. package/dist/client/flavors-qvgPSI7J.mjs +613 -0
  62. package/dist/client/flavors-qvgPSI7J.mjs.map +1 -0
  63. package/dist/client/{floatingips-BtL4d4m-.mjs → floatingips-Fa6ocNUu.mjs} +86 -86
  64. package/dist/client/{floatingips-BtL4d4m-.mjs.map → floatingips-Fa6ocNUu.mjs.map} +1 -1
  65. package/dist/client/{formatBytes-D6oa0wU9.mjs → formatBytes-tQBEnPoL.mjs} +1 -1
  66. package/dist/client/{formatBytes-D6oa0wU9.mjs.map → formatBytes-tQBEnPoL.mjs.map} +1 -1
  67. package/dist/client/{hooks-D0krAKvo.mjs → hooks-DEjb9d1F.mjs} +1 -1
  68. package/dist/client/images-CSFfefAu.mjs +1901 -0
  69. package/dist/client/images-CSFfefAu.mjs.map +1 -0
  70. package/dist/client/{images-I9gQfRa7.mjs → images-CTLCY-yY.mjs} +2 -2
  71. package/dist/client/{images-I9gQfRa7.mjs.map → images-CTLCY-yY.mjs.map} +1 -1
  72. package/dist/client/images-DM9I8G0p.mjs.map +1 -1
  73. package/dist/client/images-tYfyOkX8.mjs +8 -0
  74. package/dist/client/images-tYfyOkX8.mjs.map +1 -0
  75. package/dist/client/index.js +200 -198
  76. package/dist/client/index.js.map +1 -1
  77. package/dist/client/{network-SCVadZsv.mjs → network-rYLHyf15.mjs} +1 -1
  78. package/dist/client/{network-SCVadZsv.mjs.map → network-rYLHyf15.mjs.map} +1 -1
  79. package/dist/client/{objects-BrYe_RaJ.mjs → objects-BciXwZ00.mjs} +2 -2
  80. package/dist/client/objects-BciXwZ00.mjs.map +1 -0
  81. package/dist/client/{objects-B4yrYf_a.mjs → objects-Cdew99tK.mjs} +1 -1
  82. package/dist/client/objects-Cdew99tK.mjs.map +1 -0
  83. package/dist/client/objects-DaElrban.mjs +5340 -0
  84. package/dist/client/objects-DaElrban.mjs.map +1 -0
  85. package/dist/client/{overview-CmQkJ4Hh.mjs → overview-BMhjFMIV.mjs} +2 -2
  86. package/dist/client/{overview-CmQkJ4Hh.mjs.map → overview-BMhjFMIV.mjs.map} +1 -1
  87. package/dist/client/{overview-BjRSFSBh.mjs → overview-BYIRj7_X.mjs} +2 -2
  88. package/dist/client/{overview-BjRSFSBh.mjs.map → overview-BYIRj7_X.mjs.map} +1 -1
  89. package/dist/client/{overview-DTLIAKkJ.mjs → overview-DRCKNBH2.mjs} +2 -2
  90. package/dist/client/{overview-DTLIAKkJ.mjs.map → overview-DRCKNBH2.mjs.map} +1 -1
  91. package/dist/client/{overview-C4gjtc2q.mjs → overview-urYLOVQE.mjs} +3 -3
  92. package/dist/client/{overview-C4gjtc2q.mjs.map → overview-urYLOVQE.mjs.map} +1 -1
  93. package/dist/client/{pca-DzixU9Dl.mjs → pca-COmKvp3J.mjs} +2 -2
  94. package/dist/client/{pca-DzixU9Dl.mjs.map → pca-COmKvp3J.mjs.map} +1 -1
  95. package/dist/client/{pca-CYFJxSZ2.mjs → pca-oc7J0_Xd.mjs} +62 -62
  96. package/dist/client/pca-oc7J0_Xd.mjs.map +1 -0
  97. package/dist/client/{projects-D3hOC1cy.mjs → projects-BUabCzvw.mjs} +33 -33
  98. package/dist/client/projects-BUabCzvw.mjs.map +1 -0
  99. package/dist/client/{projects-BtyjXGq2.mjs → projects-DI_L4oDw.mjs} +2 -2
  100. package/dist/client/{projects-BtyjXGq2.mjs.map → projects-DI_L4oDw.mjs.map} +1 -1
  101. package/dist/client/{projects-DwVawmll.mjs → projects-Dl5XkXUP.mjs} +2 -2
  102. package/dist/client/{projects-DwVawmll.mjs.map → projects-Dl5XkXUP.mjs.map} +1 -1
  103. package/dist/client/{projects-BsN4bvU2.mjs → projects-HoQ0gE5Y.mjs} +1 -1
  104. package/dist/client/{projects-BsN4bvU2.mjs.map → projects-HoQ0gE5Y.mjs.map} +1 -1
  105. package/dist/client/{securitygroups-DMCIDHQS.mjs → securitygroups-BjkmHk2J.mjs} +102 -102
  106. package/dist/client/{securitygroups-DMCIDHQS.mjs.map → securitygroups-BjkmHk2J.mjs.map} +1 -1
  107. package/dist/client/{useListWithFiltering-CEDh1LO-.mjs → useListWithFiltering-CbhHJO4V.mjs} +1 -1
  108. package/dist/client/{useListWithFiltering-CEDh1LO-.mjs.map → useListWithFiltering-CbhHJO4V.mjs.map} +1 -1
  109. package/dist/client/{useProjectId-CgOTejka.mjs → useProjectId-OQv2KBbG.mjs} +1 -1
  110. package/dist/client/{useProjectId-CgOTejka.mjs.map → useProjectId-OQv2KBbG.mjs.map} +1 -1
  111. package/dist/server/index.d.ts +7 -1
  112. package/dist/server/index.js +116 -55
  113. package/package.json +3 -4
  114. package/dist/client/ListToolbar-C5lzTrit.mjs +0 -223
  115. package/dist/client/ListToolbar-C5lzTrit.mjs.map +0 -1
  116. package/dist/client/_floatingIpId-DdKnjdIV.mjs +0 -228
  117. package/dist/client/_pcaId-DFkYJEb5.mjs +0 -369
  118. package/dist/client/_pcaId-DFkYJEb5.mjs.map +0 -1
  119. package/dist/client/containers-BE2QiLBs.mjs +0 -3031
  120. package/dist/client/containers-BE2QiLBs.mjs.map +0 -1
  121. package/dist/client/containers-Cs5vOeR2.mjs.map +0 -1
  122. package/dist/client/containers-DmwhE9Uz.mjs.map +0 -1
  123. package/dist/client/flavors-pEcGkCut.mjs +0 -565
  124. package/dist/client/flavors-pEcGkCut.mjs.map +0 -1
  125. package/dist/client/images-C19gCFSy.mjs +0 -1797
  126. package/dist/client/images-C19gCFSy.mjs.map +0 -1
  127. package/dist/client/objects-B4yrYf_a.mjs.map +0 -1
  128. package/dist/client/objects-BrYe_RaJ.mjs.map +0 -1
  129. package/dist/client/objects-DOYFFn3Y.mjs +0 -4760
  130. package/dist/client/objects-DOYFFn3Y.mjs.map +0 -1
  131. package/dist/client/pca-CYFJxSZ2.mjs.map +0 -1
  132. package/dist/client/projects-D3hOC1cy.mjs.map +0 -1
  133. package/permission_policies/compute.yaml +0 -975
  134. package/permission_policies/image.yaml +0 -71
@@ -1,223 +0,0 @@
1
- import { P as e, _ as t, a as n, d as r, f as i, m as a, ot as o, r as s, tt as c, x as l, y as u } from "./build-CZRvXrAL.mjs";
2
- import { Fragment as d, jsx as f, jsxs as p } from "react/jsx-runtime";
3
- import { useCallback as m, useEffect as h, useRef as g, useState as _ } from "react";
4
- import { Trans as v, useLingui as y } from "@lingui/react";
5
- //#region src/client/components/ListToolbar/SelectedFilters.tsx
6
- var b = ({ selectedFilters: e, onDelete: t, onClear: n }) => {
7
- let { i18n: r, _: i } = y();
8
- return /* @__PURE__ */ p(c, {
9
- gap: "2",
10
- wrap: !0,
11
- alignment: "start",
12
- distribution: "start",
13
- children: [e.map((e) => /* @__PURE__ */ f(u, {
14
- closeable: !0,
15
- pillKey: e.name,
16
- pillValue: e.value,
17
- onClose: () => t(e)
18
- }, `${e.name}:${e.value}`)), e.length > 1 && /* @__PURE__ */ f(u, {
19
- pillValue: r._({ id: "yYxB17" }),
20
- className: "ml-2",
21
- onClick: n
22
- })]
23
- });
24
- };
25
- //#endregion
26
- //#region src/client/components/ListToolbar/FiltersInput.tsx
27
- function x(e) {
28
- return e == null ? !0 : typeof e == "string" || Array.isArray(e) ? e.length === 0 : e instanceof Map || e instanceof Set ? e.size === 0 : typeof e == "object" ? Object.keys(e).length === 0 : !1;
29
- }
30
- var S = ({ filters: e, onChange: t }) => {
31
- let { i18n: i, _: c } = y(), [l, u] = _(""), [d, h] = _(""), g = e.find((e) => e.filterName === l)?.values?.filter((e) => e), v = m((e) => {
32
- h(e), !x(l) && !x(e) && t({
33
- name: l,
34
- value: e
35
- }), setTimeout(() => {
36
- h("");
37
- }, 0);
38
- }, [
39
- l,
40
- h,
41
- t
42
- ]), b = () => ({
43
- className: "w-full sm:flex-1 sm:min-w-0",
44
- name: "filter",
45
- "data-testid": "select-filterValue",
46
- label: i._({ id: "0cVgUw" }),
47
- value: l,
48
- onChange: (e) => {
49
- u(String(e));
50
- }
51
- }), S = () => ({
52
- className: "w-full sm:flex-1 sm:min-w-0",
53
- name: "filterValue",
54
- "data-testid": "combobox-filterValue",
55
- value: d,
56
- disabled: !l,
57
- onChange: v
58
- });
59
- return /* @__PURE__ */ p(o, {
60
- className: "flex w-full flex-col sm:w-auto sm:flex-row sm:items-end",
61
- children: [/* @__PURE__ */ f(s, {
62
- ...b(),
63
- children: e?.map(({ displayName: e, filterName: t }) => /* @__PURE__ */ f(r, {
64
- value: t,
65
- label: e,
66
- "data-testid": t
67
- }, t))
68
- }), /* @__PURE__ */ f(n, {
69
- ...S(),
70
- children: g?.map((e) => /* @__PURE__ */ f(a, {
71
- value: e,
72
- label: e,
73
- "data-testid": e
74
- }, e))
75
- })]
76
- });
77
- }, C = ({ sortBy: t, onSortByChange: n, sortDirection: i, onSortDirectionChange: a, options: c }) => {
78
- let { i18n: l, _: u } = y(), d = () => ({
79
- className: "flex-grow",
80
- onChange: n,
81
- value: t,
82
- "data-testid": "sort-select",
83
- label: l._({ id: "/HgF9q" })
84
- }), m = () => ({
85
- "data-testid": "direction-toggle",
86
- order: i,
87
- onChange: a
88
- });
89
- return /* @__PURE__ */ p(o, {
90
- className: "flex w-full items-end sm:w-auto",
91
- children: [/* @__PURE__ */ f(s, {
92
- ...d(),
93
- children: c.map((e) => /* @__PURE__ */ f(r, {
94
- value: e.value,
95
- children: e.label
96
- }, e.value))
97
- }), /* @__PURE__ */ f(e, {
98
- ...m(),
99
- className: "shadow-none"
100
- })]
101
- });
102
- }, w = ({ filterSettings: e, onFilter: n, sortSettings: r, onSort: a, searchTerm: o, onSearch: s, searchInputProps: u = {}, actions: _, tabs: x, totalCount: w, filteredCount: T, itemName: E = "items", lastUpdated: D }) => {
103
- let { i18n: O, _: k } = y(), A = g(void 0);
104
- h(() => () => {
105
- A.current && clearTimeout(A.current);
106
- }, []);
107
- let j = (e) => e ? (typeof e == "string" ? new Date(e) : e).toLocaleString() : "", M = w !== void 0 && T !== void 0, N = m((t) => {
108
- !n || !e || n({
109
- ...e,
110
- selectedFilters: e.selectedFilters?.filter((e) => !(e.name === t.name && e.value === t.value))
111
- });
112
- }, [e, n]), P = (t) => {
113
- if (!n || !e || e.selectedFilters?.some((e) => e.name === t.name && e.value === t.value)) return;
114
- let r = e.filters.find((e) => t.name === e.filterName)?.supportsMultiValue ? [...e.selectedFilters || [], t] : [...(e.selectedFilters || []).filter((e) => e.name !== t.name), t];
115
- n({
116
- ...e,
117
- selectedFilters: r
118
- });
119
- }, F = m((e) => {
120
- let t = typeof e == "string" ? e : "";
121
- A.current && clearTimeout(A.current), s?.(t);
122
- }, [s]), I = m((e) => {
123
- let t = e.currentTarget.value;
124
- A.current && clearTimeout(A.current), A.current = window.setTimeout(() => s?.(t), 500);
125
- }, [s]), L = m(() => {
126
- A.current && clearTimeout(A.current), s?.("");
127
- }, [s]), R = e && n ? {
128
- filters: e.filters,
129
- onChange: P
130
- } : null, z = r && a ? {
131
- options: r.options,
132
- sortBy: r.sortBy,
133
- sortDirection: r.sortDirection || "asc",
134
- onSortByChange: (e) => a({
135
- ...r,
136
- sortBy: e,
137
- sortDirection: r.sortDirection || "asc"
138
- }),
139
- onSortDirectionChange: (e) => a({
140
- ...r,
141
- sortDirection: e
142
- })
143
- } : null, B = s ? {
144
- placeholder: O._({ id: "YIix5Y" }),
145
- "data-testid": "searchbar",
146
- value: o,
147
- onInput: I,
148
- onClear: L,
149
- onSearch: F,
150
- ...u
151
- } : null;
152
- return /* @__PURE__ */ p(d, { children: [x && /* @__PURE__ */ f("div", {
153
- className: "w-full",
154
- children: /* @__PURE__ */ f(t, {
155
- activeItem: x.activeItem,
156
- onActiveItemChange: x.onActiveItemChange,
157
- children: x.items.map((e) => /* @__PURE__ */ f(l, {
158
- label: e.label,
159
- value: e.value
160
- }, e.value))
161
- })
162
- }), /* @__PURE__ */ p(c, {
163
- alignment: "center",
164
- gap: "6",
165
- className: "bg-theme-background-lvl-1 flex w-full flex-col p-4",
166
- children: [
167
- _ && /* @__PURE__ */ f(c, {
168
- direction: "horizontal",
169
- className: "w-full justify-end",
170
- children: _
171
- }),
172
- /* @__PURE__ */ p("div", {
173
- className: "flex w-full flex-col items-stretch gap-4 md:flex-row md:items-center",
174
- children: [
175
- R && /* @__PURE__ */ f("div", {
176
- className: "w-full md:w-auto md:min-w-37.5",
177
- children: /* @__PURE__ */ f(S, { ...R })
178
- }),
179
- z && /* @__PURE__ */ f("div", {
180
- className: "w-full md:w-auto md:min-w-45",
181
- children: /* @__PURE__ */ f(C, { ...z })
182
- }),
183
- B && /* @__PURE__ */ f("div", {
184
- className: "w-full md:ml-auto md:w-auto md:min-w-25",
185
- children: /* @__PURE__ */ f(i, { ...B })
186
- })
187
- ]
188
- }),
189
- e?.selectedFilters && e.selectedFilters.length > 0 && n && /* @__PURE__ */ f("div", {
190
- className: "w-full",
191
- children: /* @__PURE__ */ f(b, {
192
- selectedFilters: e.selectedFilters,
193
- onDelete: N,
194
- onClear: () => n({
195
- ...e,
196
- selectedFilters: []
197
- })
198
- })
199
- }),
200
- (M || D) && /* @__PURE__ */ f("div", {
201
- className: "text-theme-secondary flex w-full items-center justify-between text-sm",
202
- children: /* @__PURE__ */ p("div", {
203
- className: "flex items-center gap-2",
204
- children: [M && /* @__PURE__ */ f("span", { children: /* @__PURE__ */ f(v, {
205
- id: "Vg0k6h",
206
- values: {
207
- filteredCount: T,
208
- totalCount: w,
209
- itemName: E
210
- }
211
- }) }), D && /* @__PURE__ */ f("span", { children: /* @__PURE__ */ f(v, {
212
- id: "wlUDbB",
213
- values: { formattedDate: j(D) }
214
- }) })]
215
- })
216
- })
217
- ]
218
- })] });
219
- };
220
- //#endregion
221
- export { w as t };
222
-
223
- //# sourceMappingURL=ListToolbar-C5lzTrit.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ListToolbar-C5lzTrit.mjs","names":["Pill","Stack","SelectedFilters","selectedFilters","onDelete","onClear","useLingui","gap","wrap","alignment","distribution","map","filter","closeable","pillKey","name","pillValue","value","onClose","length","t","className","onClick","useCallback","useState","InputGroup","ComboBox","ComboBoxOption","SelectOption","Select","isEmpty","value","Array","isArray","length","Map","Set","size","Object","keys","FiltersInput","filters","onChange","useLingui","selectedFilterName","setSelectedFilterName","selectedFilterValue","setSelectedFilterValue","filterValues","find","filter","filterName","values","handleValueChange","name","setTimeout","getSelectProps","className","label","t","String","getComboBoxProps","disabled","map","displayName","data-testid","React","Select","SelectOption","SortButton","InputGroup","SortInput","sortBy","onSortByChange","sortDirection","onSortDirectionChange","options","useLingui","getSelectProps","className","onChange","value","label","t","getSortButtonProps","order","map","option","useCallback","useRef","useEffect","SearchInput","Stack","TabNavigation","TabNavigationItem","SelectedFilters","FiltersInput","SortInput","ListToolbar","filterSettings","onFilter","sortSettings","onSort","searchTerm","onSearch","searchInputProps","actions","tabs","totalCount","filteredCount","itemName","lastUpdated","useLingui","debounceTimerRef","undefined","current","clearTimeout","formatLastUpdated","date","dateObj","Date","toLocaleString","showCountInfo","handleFilterDelete","filterToRemove","selectedFilters","filter","name","value","handleSelect","selectedFilter","filterExists","some","supportsMultiValue","filters","find","filterName","newSelected","handleSearch","searchValue","handleSearchInput","event","currentTarget","window","setTimeout","handleSearchClear","filtersProps","onChange","sortProps","options","sortBy","sortDirection","onSortByChange","param","onSortDirectionChange","direction","searchProps","placeholder","t","onInput","onClear","div","className","activeItem","onActiveItemChange","items","map","item","label","alignment","gap","length","onDelete","span","formattedDate"],"sources":["../../src/client/components/ListToolbar/SelectedFilters.tsx","../../src/client/components/ListToolbar/FiltersInput.tsx","../../src/client/components/ListToolbar/SortInput.tsx","../../src/client/components/ListToolbar/index.tsx"],"sourcesContent":["import { useLingui } from \"@lingui/react/macro\"\nimport { Pill, Stack } from \"@cloudoperators/juno-ui-components\"\nimport { SelectedFilter } from \"./types\"\n\nexport type SelectedFiltersProps = {\n /**\n * Array of currently active filters to be displayed as closeable pills.\n */\n selectedFilters: SelectedFilter[]\n\n /**\n * Callback function invoked when a user removes an individual filter pill.\n */\n onDelete: (filter: SelectedFilter) => void\n\n /**\n * Callback function invoked when the \"Clear all\" button is clicked.\n */\n onClear: () => void\n}\n\n/**\n * SelectedFilters Component\n *\n * Displays currently active filters as closeable pill components with individual\n * remove buttons and an optional \"Clear all\" button (shown when 2+ filters are active).\n *\n * The pills are arranged in a flexible, wrapping layout that adapts to available space.\n */\nexport const SelectedFilters = ({ selectedFilters, onDelete, onClear }: SelectedFiltersProps) => {\n const { t } = useLingui()\n\n return (\n <Stack gap=\"2\" wrap={true} alignment=\"start\" distribution=\"start\">\n {/* Render a closeable pill for each selected filter */}\n {selectedFilters.map((filter) => (\n <Pill\n key={`${filter.name}:${filter.value}`}\n closeable\n pillKey={filter.name}\n pillValue={filter.value}\n onClose={() => onDelete(filter)}\n />\n ))}\n {selectedFilters.length > 1 && <Pill pillValue={t`Clear all`} className=\"ml-2\" onClick={onClear} />}\n </Stack>\n )\n}\n","import { useCallback, useState } from \"react\"\nimport { useLingui } from \"@lingui/react/macro\"\nimport {\n InputGroup,\n ComboBox,\n ComboBoxProps,\n ComboBoxOption,\n SelectOption,\n Select,\n SelectProps,\n} from \"@cloudoperators/juno-ui-components\"\nimport { Filter, SelectedFilter } from \"./types\"\n\nexport type FiltersInputProps = {\n filters: Filter[]\n onChange: (filter: SelectedFilter) => void\n}\n\nfunction isEmpty(value: unknown) {\n if (value == null) return true\n if (typeof value === \"string\" || Array.isArray(value)) return value.length === 0\n if (value instanceof Map || value instanceof Set) return value.size === 0\n if (typeof value === \"object\") return Object.keys(value).length === 0\n return false\n}\n\nexport const FiltersInput = ({ filters, onChange }: FiltersInputProps) => {\n const { t } = useLingui()\n\n const [selectedFilterName, setSelectedFilterName] = useState<string>(\"\")\n const [selectedFilterValue, setSelectedFilterValue] = useState<string>(\"\")\n\n const filterValues: string[] | undefined = filters\n .find((filter) => filter.filterName === selectedFilterName)\n ?.values?.filter((value) => value)\n\n const handleValueChange = useCallback(\n (value: string) => {\n setSelectedFilterValue(value)\n if (!isEmpty(selectedFilterName) && !isEmpty(value)) {\n onChange({\n name: selectedFilterName,\n value: value,\n })\n }\n setTimeout(() => {\n setSelectedFilterValue(\"\")\n }, 0)\n },\n [selectedFilterName, setSelectedFilterValue, onChange]\n )\n\n const getSelectProps = (): SelectProps & { \"data-testid\"?: string } => ({\n className: \"w-full sm:flex-1 sm:min-w-0\",\n name: \"filter\",\n \"data-testid\": \"select-filterValue\",\n label: t`Filter by`,\n value: selectedFilterName,\n onChange: (value: string | number | string[] | undefined) => {\n setSelectedFilterName(String(value))\n },\n })\n\n const getComboBoxProps = (): ComboBoxProps & { \"data-testid\"?: string } => ({\n className: \"w-full sm:flex-1 sm:min-w-0\",\n name: \"filterValue\",\n \"data-testid\": \"combobox-filterValue\",\n value: selectedFilterValue,\n disabled: !selectedFilterName,\n onChange: handleValueChange,\n })\n\n return (\n <InputGroup className=\"flex w-full flex-col sm:w-auto sm:flex-row sm:items-end\">\n <Select {...getSelectProps()}>\n {filters?.map(({ displayName, filterName }) => (\n <SelectOption value={filterName} label={displayName} key={filterName} data-testid={filterName} />\n ))}\n </Select>\n <ComboBox {...getComboBoxProps()}>\n {filterValues?.map((value) => (\n <ComboBoxOption value={value} key={value} label={value} data-testid={value} />\n ))}\n </ComboBox>\n </InputGroup>\n )\n}\n","import React from \"react\"\nimport { useLingui } from \"@lingui/react/macro\"\nimport {\n Select,\n SelectOption,\n SortButton,\n InputGroup,\n SelectProps,\n ButtonProps,\n} from \"@cloudoperators/juno-ui-components\"\nimport { SortOption } from \"./types\"\n\nexport interface SortInputProps {\n sortBy?: string | number | string[]\n onSortByChange: (param?: string | number | string[]) => void\n sortDirection: \"asc\" | \"desc\"\n onSortDirectionChange: (direction: \"asc\" | \"desc\") => void\n options: SortOption[]\n}\n\nexport const SortInput: React.FC<SortInputProps> = ({\n sortBy,\n onSortByChange,\n sortDirection,\n onSortDirectionChange,\n options,\n}) => {\n const { t } = useLingui()\n\n const getSelectProps = (): SelectProps & { \"data-testid\"?: string } => ({\n className: \"flex-grow\",\n onChange: onSortByChange,\n value: sortBy,\n \"data-testid\": \"sort-select\",\n label: t`Sort by`,\n })\n\n const getSortButtonProps = (): Omit<ButtonProps, \"onChange\"> & {\n \"data-testid\"?: string\n order: \"asc\" | \"desc\"\n onChange: (order: \"asc\" | \"desc\") => void\n } => ({\n \"data-testid\": \"direction-toggle\",\n order: sortDirection,\n onChange: onSortDirectionChange,\n })\n\n return (\n <InputGroup className=\"flex w-full items-end sm:w-auto\">\n <Select {...getSelectProps()}>\n {options.map((option) => (\n <SelectOption key={option.value} value={option.value}>\n {option.label}\n </SelectOption>\n ))}\n </Select>\n <SortButton {...getSortButtonProps()} className=\"shadow-none\" />\n </InputGroup>\n )\n}\n","import { ReactNode, useCallback, useRef, useEffect } from \"react\"\nimport { Trans, useLingui } from \"@lingui/react/macro\"\nimport {\n SearchInput,\n SearchInputProps,\n Stack,\n TabNavigation,\n TabNavigationItem,\n} from \"@cloudoperators/juno-ui-components\"\nimport { SelectedFilters } from \"./SelectedFilters\"\nimport { FiltersInput } from \"./FiltersInput\"\nimport { SortInput } from \"./SortInput\"\nimport { FilterSettings, SelectedFilter, SortSettings } from \"./types\"\n\nexport type ListToolbarProps = {\n filterSettings?: FilterSettings\n onFilter?: (filterSettings: FilterSettings) => void\n sortSettings?: SortSettings\n onSort?: (sortSettings: SortSettings) => void\n searchTerm?: string\n onSearch?: (searchTerm: string) => void\n searchInputProps?: Omit<SearchInputProps, \"value\" | \"onSearch\" | \"onClear\" | \"onInput\">\n actions?: ReactNode\n tabs?: {\n items: Array<{ label: string; value: string }>\n activeItem: string\n onActiveItemChange: (value: ReactNode) => void\n }\n // Count information\n totalCount?: number\n itemName?: string // e.g. \"items\", \"users\", \"projects\" - used in count display\n filteredCount?: number\n // Last updated timestamp\n lastUpdated?: Date | string\n}\n\nexport const ListToolbar = ({\n filterSettings,\n onFilter,\n sortSettings,\n onSort,\n searchTerm,\n onSearch,\n searchInputProps = {},\n actions,\n tabs,\n totalCount,\n filteredCount,\n itemName = \"items\",\n lastUpdated,\n}: ListToolbarProps) => {\n const { t } = useLingui()\n\n const debounceTimerRef = useRef<number | undefined>(undefined)\n\n useEffect(() => {\n return () => {\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current)\n }\n }\n }, [])\n\n // Format last updated time\n const formatLastUpdated = (date: Date | string | undefined): string => {\n if (!date) return \"\"\n const dateObj = typeof date === \"string\" ? new Date(date) : date\n return dateObj.toLocaleString()\n }\n\n const showCountInfo = totalCount !== undefined && filteredCount !== undefined\n\n const handleFilterDelete = useCallback(\n (filterToRemove: SelectedFilter) => {\n if (!onFilter || !filterSettings) return\n onFilter({\n ...filterSettings,\n selectedFilters: filterSettings.selectedFilters?.filter(\n (filter) => !(filter.name === filterToRemove.name && filter.value === filterToRemove.value)\n ),\n })\n },\n [filterSettings, onFilter]\n )\n\n const handleSelect = (selectedFilter: SelectedFilter) => {\n if (!onFilter || !filterSettings) return\n const filterExists = filterSettings.selectedFilters?.some(\n (filter) => filter.name === selectedFilter.name && filter.value === selectedFilter.value\n )\n if (filterExists) return\n\n const supportsMultiValue = filterSettings.filters.find(\n (filter) => selectedFilter.name === filter.filterName\n )?.supportsMultiValue\n\n const newSelected = supportsMultiValue\n ? [...(filterSettings.selectedFilters || []), selectedFilter]\n : [\n ...(filterSettings.selectedFilters || []).filter((filter) => filter.name !== selectedFilter.name),\n selectedFilter,\n ]\n\n onFilter({ ...filterSettings, selectedFilters: newSelected })\n }\n\n const handleSearch = useCallback(\n (value: string | number | string[] | undefined) => {\n const searchValue = typeof value === \"string\" ? value : \"\"\n\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current)\n }\n\n onSearch?.(searchValue)\n },\n [onSearch]\n )\n\n const handleSearchInput = useCallback(\n (event: React.FormEvent<HTMLInputElement>) => {\n const searchValue = event.currentTarget.value\n if (debounceTimerRef.current) clearTimeout(debounceTimerRef.current)\n debounceTimerRef.current = window.setTimeout(() => onSearch?.(searchValue), 500)\n },\n [onSearch]\n )\n\n const handleSearchClear = useCallback(() => {\n if (debounceTimerRef.current) clearTimeout(debounceTimerRef.current)\n onSearch?.(\"\")\n }, [onSearch])\n\n const filtersProps = filterSettings && onFilter ? { filters: filterSettings.filters, onChange: handleSelect } : null\n const sortProps =\n sortSettings && onSort\n ? {\n options: sortSettings.options,\n sortBy: sortSettings.sortBy,\n sortDirection: sortSettings.sortDirection || \"asc\",\n onSortByChange: (param: string | number | string[] | undefined) =>\n onSort({ ...sortSettings, sortBy: param, sortDirection: sortSettings.sortDirection || \"asc\" }),\n onSortDirectionChange: (direction: \"asc\" | \"desc\") => onSort({ ...sortSettings, sortDirection: direction }),\n }\n : null\n\n const searchProps: (SearchInputProps & { \"data-testid\"?: string }) | null = onSearch\n ? {\n placeholder: t`Search...`,\n \"data-testid\": \"searchbar\",\n value: searchTerm,\n onInput: handleSearchInput,\n onClear: handleSearchClear,\n onSearch: handleSearch,\n ...searchInputProps,\n }\n : null\n\n return (\n <>\n {tabs && (\n <div className=\"w-full\">\n <TabNavigation activeItem={tabs.activeItem} onActiveItemChange={tabs.onActiveItemChange}>\n {tabs.items.map((item) => (\n <TabNavigationItem key={item.value} label={item.label} value={item.value} />\n ))}\n </TabNavigation>\n </div>\n )}\n <Stack alignment=\"center\" gap=\"6\" className=\"bg-theme-background-lvl-1 flex w-full flex-col p-4\">\n {actions && (\n <Stack direction=\"horizontal\" className=\"w-full justify-end\">\n {actions}\n </Stack>\n )}\n\n <div className=\"flex w-full flex-col items-stretch gap-4 md:flex-row md:items-center\">\n {filtersProps && (\n <div className=\"w-full md:w-auto md:min-w-37.5\">\n <FiltersInput {...filtersProps} />\n </div>\n )}\n {sortProps && (\n <div className=\"w-full md:w-auto md:min-w-45\">\n <SortInput {...sortProps} />\n </div>\n )}\n {searchProps && (\n <div className=\"w-full md:ml-auto md:w-auto md:min-w-25\">\n <SearchInput {...searchProps} />\n </div>\n )}\n </div>\n\n {filterSettings?.selectedFilters && filterSettings.selectedFilters.length > 0 && onFilter && (\n <div className=\"w-full\">\n <SelectedFilters\n selectedFilters={filterSettings.selectedFilters}\n onDelete={handleFilterDelete}\n onClear={() => onFilter({ ...filterSettings, selectedFilters: [] })}\n />\n </div>\n )}\n {/* Count and Last Updated Info */}\n {(showCountInfo || lastUpdated) && (\n <div className=\"text-theme-secondary flex w-full items-center justify-between text-sm\">\n <div className=\"flex items-center gap-2\">\n {showCountInfo && (\n <span>\n <Trans>\n Showing {filteredCount} of {totalCount} {itemName}\n </Trans>\n </span>\n )}\n {lastUpdated &&\n (() => {\n const formattedDate = formatLastUpdated(lastUpdated)\n return (\n <span>\n <Trans>Last updated: {formattedDate}</Trans>\n </span>\n )\n })()}\n </div>\n </div>\n )}\n </Stack>\n </>\n )\n}\n"],"mappings":"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"}
@@ -1,228 +0,0 @@
1
- import { A as e, I as t, M as n, U as r, Z as i, c as a, h as o, tt as s } from "./build-CZRvXrAL.mjs";
2
- import { r as c } from "./trpcClient-BxguzNYF.mjs";
3
- import { t as l } from "./_floatingIpId-C8G20nNt.mjs";
4
- import { t as u } from "./useProjectId-CgOTejka.mjs";
5
- import "./hooks-D0krAKvo.mjs";
6
- import { t as d } from "./FloatingIpActionModals-lKMwLuL8.mjs";
7
- import { Fragment as f, jsx as p, jsxs as m } from "react/jsx-runtime";
8
- import { Fragment as h } from "react";
9
- import { useNavigate as g } from "@tanstack/react-router";
10
- import { Trans as _, useLingui as v } from "@lingui/react";
11
- //#region src/client/utils/formatFloatingIpStatus.ts
12
- var y = (e) => e.charAt(0) + e.slice(1).toLowerCase(), b = ({ items: e }) => {
13
- let i = Math.ceil(e.length / 2), a = e.slice(0, i), o = e.slice(i);
14
- return /* @__PURE__ */ m(s, {
15
- gap: "6",
16
- className: "grid grid-cols-2",
17
- children: [/* @__PURE__ */ p(r, {
18
- alignTerms: "right",
19
- children: a.map(({ label: e, value: r }) => /* @__PURE__ */ m(h, { children: [/* @__PURE__ */ p(n, { children: e }), /* @__PURE__ */ p(t, { children: r })] }, e))
20
- }), /* @__PURE__ */ p(r, {
21
- alignTerms: "right",
22
- children: o.map(({ label: e, value: r }) => /* @__PURE__ */ m(h, { children: [/* @__PURE__ */ p(n, { children: e }), /* @__PURE__ */ p(t, { children: r })] }, e))
23
- })]
24
- });
25
- }, x = ({ floatingIp: t }) => {
26
- let { i18n: n, _: r } = v(), i = [
27
- {
28
- label: n._({ id: "S0kLOH" }),
29
- value: t.id
30
- },
31
- {
32
- label: n._({ id: "Nu4oKW" }),
33
- value: t.description || "—"
34
- },
35
- {
36
- label: n._({ id: "mSfwLL" }),
37
- value: t.project_id || "—"
38
- },
39
- {
40
- label: n._({ id: "uAQUqI" }),
41
- value: y(t.status)
42
- },
43
- {
44
- label: n._({ id: "88kg0+" }),
45
- value: t.created_at ? new Date(t.created_at).toLocaleString() : "—"
46
- },
47
- {
48
- label: n._({ id: "Llcakz" }),
49
- value: t.updated_at ? new Date(t.updated_at).toLocaleString() : "—"
50
- },
51
- {
52
- label: n._({ id: "OYHzN1" }),
53
- value: t.tags?.join(", ") || "—"
54
- }
55
- ], c = [
56
- {
57
- label: n._({ id: "xNG/3n" }),
58
- value: t.floating_ip_address || "—"
59
- },
60
- {
61
- label: n._({ id: "7AfIPZ" }),
62
- value: t.floating_network_id || "—"
63
- },
64
- {
65
- label: n._({ id: "Nc7QKU" }),
66
- value: t.fixed_ip_address || "—"
67
- },
68
- {
69
- label: n._({ id: "6sxz+g" }),
70
- value: t.port_details?.name || "—"
71
- },
72
- {
73
- label: n._({ id: "sNVNmf" }),
74
- value: t.port_details?.mac_address || "—"
75
- },
76
- {
77
- label: n._({ id: "hrBow7" }),
78
- value: t.port_details?.network_id || "—"
79
- },
80
- {
81
- label: n._({ id: "OaSktR" }),
82
- value: t.port_details?.device_owner || "—"
83
- },
84
- {
85
- label: n._({ id: "9rz81C" }),
86
- value: t.port_details?.device_id || "—"
87
- },
88
- {
89
- label: n._({ id: "/bUiYk" }),
90
- value: t.router_id || "—"
91
- },
92
- {
93
- label: n._({ id: "eks7oA" }),
94
- value: t.port_id || "—"
95
- },
96
- {
97
- label: n._({ id: "W9kfjU" }),
98
- value: t.qos_policy_id || "—"
99
- },
100
- {
101
- label: n._({ id: "mQSO1Y" }),
102
- value: t.port_forwardings?.map((e) => e.id).join(", ") || "—"
103
- }
104
- ], l = [{
105
- label: n._({ id: "WlpcJv" }),
106
- value: t.dns_domain || "—"
107
- }, {
108
- label: n._({ id: "eGEHJE" }),
109
- value: t.dns_name || "—"
110
- }];
111
- return /* @__PURE__ */ m(f, { children: [
112
- /* @__PURE__ */ p("p", {
113
- className: "text-theme-secondary mt-2 text-sm",
114
- children: /* @__PURE__ */ p(_, { id: "DNVql8" })
115
- }),
116
- /* @__PURE__ */ p(d, {
117
- floatingIp: t,
118
- children: ({ toggleEditModal: e, toggleAttachModal: t, toggleDetachModal: r, toggleReleaseModal: i }) => /* @__PURE__ */ m(o, { children: [
119
- /* @__PURE__ */ p(a, {
120
- onClick: e,
121
- children: n._({ id: "n22YIM" })
122
- }),
123
- /* @__PURE__ */ p(a, {
124
- onClick: t,
125
- children: n._({ id: "igVDFt" })
126
- }),
127
- /* @__PURE__ */ p(a, {
128
- onClick: r,
129
- children: n._({ id: "FOcBn3" })
130
- }),
131
- /* @__PURE__ */ p(a, {
132
- onClick: i,
133
- children: n._({ id: "H+a5j6" })
134
- })
135
- ] })
136
- }),
137
- /* @__PURE__ */ m(s, {
138
- direction: "vertical",
139
- gap: "6",
140
- className: "my-6",
141
- children: [
142
- /* @__PURE__ */ m(s, {
143
- direction: "vertical",
144
- gap: "2",
145
- children: [/* @__PURE__ */ p(e, { children: /* @__PURE__ */ p(_, { id: "SuX2Ca" }) }), /* @__PURE__ */ p(b, { items: i })]
146
- }),
147
- /* @__PURE__ */ m(s, {
148
- direction: "vertical",
149
- gap: "2",
150
- children: [/* @__PURE__ */ p(e, { children: /* @__PURE__ */ p(_, { id: "jKopCP" }) }), /* @__PURE__ */ p(b, { items: c })]
151
- }),
152
- /* @__PURE__ */ m(s, {
153
- direction: "vertical",
154
- gap: "2",
155
- children: [/* @__PURE__ */ p(e, { children: /* @__PURE__ */ p(_, { id: "5M4Te3" }) }), /* @__PURE__ */ p(b, { items: l })]
156
- })
157
- ]
158
- })
159
- ] });
160
- };
161
- //#endregion
162
- //#region src/client/routes/_auth/projects/$projectId/network/floatingips/$floatingIpId/index.tsx?tsr-split=component
163
- function S() {
164
- let { floatingIpId: t } = l.useParams(), n = u(), r = g(), { data: o, isLoading: d, isError: h, error: v } = c.network.floatingIp.getById.useQuery({
165
- project_id: n,
166
- floatingip_id: t
167
- }), y = () => {
168
- r({
169
- to: "/projects/$projectId/network/floatingips",
170
- params: { projectId: n }
171
- });
172
- };
173
- if (d) return /* @__PURE__ */ m(s, {
174
- className: "fixed inset-0",
175
- distribution: "center",
176
- alignment: "center",
177
- direction: "vertical",
178
- children: [/* @__PURE__ */ p(i, {
179
- variant: "primary",
180
- size: "large",
181
- className: "mb-2"
182
- }), /* @__PURE__ */ p(_, { id: "VLI9eO" })]
183
- });
184
- if (h) {
185
- let e = v?.message || "Unknown error";
186
- return /* @__PURE__ */ m(s, {
187
- className: "fixed inset-0",
188
- distribution: "center",
189
- alignment: "center",
190
- direction: "vertical",
191
- gap: "5",
192
- children: [
193
- /* @__PURE__ */ p("p", {
194
- className: "text-theme-error font-semibold",
195
- children: /* @__PURE__ */ p(_, { id: "Smk7M2" })
196
- }),
197
- /* @__PURE__ */ p("p", {
198
- className: "text-theme-highest",
199
- children: e
200
- }),
201
- /* @__PURE__ */ p(a, {
202
- onClick: y,
203
- variant: "primary",
204
- children: /* @__PURE__ */ p(_, { id: "z1JceR" })
205
- })
206
- ]
207
- });
208
- }
209
- return o ? /* @__PURE__ */ m(f, { children: [/* @__PURE__ */ p(e, { children: o.floating_ip_address }), /* @__PURE__ */ p(x, { floatingIp: o })] }) : /* @__PURE__ */ m(s, {
210
- className: "fixed inset-0",
211
- distribution: "center",
212
- alignment: "center",
213
- direction: "vertical",
214
- gap: "5",
215
- children: [/* @__PURE__ */ p("p", {
216
- className: "text-theme-secondary",
217
- children: /* @__PURE__ */ p(_, { id: "ChOuUj" })
218
- }), /* @__PURE__ */ p(a, {
219
- onClick: y,
220
- variant: "primary",
221
- children: /* @__PURE__ */ p(_, { id: "z1JceR" })
222
- })]
223
- });
224
- }
225
- //#endregion
226
- export { S as component };
227
-
228
- //# sourceMappingURL=_floatingIpId-DdKnjdIV.mjs.map