@orchidui/core 1.88.0 → 1.91.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/DataDisplay/AccountVerificationContent/OcAccountVerificationContent.js +1 -1
- package/dist/DataDisplay/CustomerCard/OcCustomerCard.js +1 -1
- package/dist/DataDisplay/FloatContent/OcFloatContent.js +1 -1
- package/dist/DataDisplay/HorizontalProgressbar/OcHorizontalProgressbar.js +1 -1
- package/dist/DataDisplay/InfoCard/OcInfoCard.js +1 -1
- package/dist/DataDisplay/ListDetail/OcListDetail.js +1 -1
- package/dist/DataDisplay/ListItem/OcListItem.js +1 -1
- package/dist/DataDisplay/NewTable/OcNewTable.js +1 -1
- package/dist/DataDisplay/OnboardingListItem/OcOnboardingListItem.js +1 -1
- package/dist/DataDisplay/OnboardingRecap/OcOnboardingRecap.js +1 -1
- package/dist/DataDisplay/Overview/OcOverview.js +1 -1
- package/dist/DataDisplay/Pagination/OcPagination.js +1 -1
- package/dist/DataDisplay/ProgressBar/OcProgressBar.js +1 -1
- package/dist/DataDisplay/RowItemData/OcRowItemData.js +1 -1
- package/dist/DataDisplay/Table/OcTable.js +1 -1
- package/dist/DataDisplay/TransferSummary/OcTransferSummary.js +1 -1
- package/dist/Disclosure/Accordion/OcAccordion.js +1 -1
- package/dist/Disclosure/OnboardingAccordion/OnboardingAccordion.js +1 -1
- package/dist/Disclosure/OnboardingProduct/OnboardingProductOption.js +1 -1
- package/dist/Disclosure/Steps/OcSteps.js +1 -1
- package/dist/Disclosure/SwitchTabs/OcSwitchTabs.js +1 -1
- package/dist/Disclosure/Tabs/Tabs.js +1 -1
- package/dist/Disclosure/Variants/OcVariants.js +1 -1
- package/dist/Elements/AdditionalContent/OcAdditionalContent.js +1 -1
- package/dist/Elements/AuthenticationOption/AuthenticationOption.js +1 -1
- package/dist/Elements/Box/OcBox.js +1 -1
- package/dist/Elements/Checklist/OcChecklist.js +1 -1
- package/dist/Elements/EmptyPage/OcEmptyPage.js +1 -1
- package/dist/Elements/FeatureOverviewCard/OcFeatureOverviewCard.js +1 -1
- package/dist/Elements/Header/OcHeader.js +1 -1
- package/dist/Elements/PageTitle/OcPageTitle.js +1 -1
- package/dist/Elements/SandboxBanner/OcSandboxBanner.js +1 -1
- package/dist/Elements/Section/OcSection.js +1 -1
- package/dist/Elements/Sidebar/OcSidebar.js +2 -2
- package/dist/Elements/SubSidebar/OcSubSidebar.js +1 -1
- package/dist/Elements/TopBanner/OcTopBanner.js +1 -1
- package/dist/Elements/VerificationOption/OcVerificationOption.js +1 -1
- package/dist/Feedback/Banner/OcBanner.js +1 -1
- package/dist/Feedback/Chip/OcChip.js +1 -1
- package/dist/Feedback/ShareIcon/OcShareIcon.js +1 -1
- package/dist/Feedback/Snackbar/OcSnackbar.js +1 -1
- package/dist/Feedback/Tag/OcTag.js +1 -1
- package/dist/Form/BaseInput/OcBaseInput.js +1 -1
- package/dist/Form/Button/OcButton.js +1 -1
- package/dist/Form/Calendar/OcCalendar.js +1 -1
- package/dist/Form/CardInput/OcCardInput.js +1 -1
- package/dist/Form/Checkbox/OcCheckbox.js +1 -1
- package/dist/Form/CheckboxesGroup/OcCheckboxesGroup.js +1 -1
- package/dist/Form/Criteria/OcCriteria.js +1 -1
- package/dist/Form/Cropper/OcCropper.js +1 -1
- package/dist/Form/DatePicker/OcDatePicker.js +1 -1
- package/dist/Form/EmojiPicker/OcEmojiPicker.js +1 -1
- package/dist/Form/Input/OcInput.js +1 -1
- package/dist/Form/LinkInput/OcLinkInput.js +1 -1
- package/dist/Form/MultipleUploadFile/OcMultipleUploadFile.js +1 -1
- package/dist/Form/NumberInput/OcNumberInput.js +1 -1
- package/dist/Form/PhoneInput/OcPhoneInput.js +1 -1
- package/dist/Form/Radio/OcRadio.js +1 -1
- package/dist/Form/RadioGroup/OcRadioGroup.js +1 -1
- package/dist/Form/RangeInput/OcRangeInput.js +1 -1
- package/dist/Form/SectionItem/OcSectionItem.js +1 -1
- package/dist/Form/Select/OcSelect.js +1 -1
- package/dist/Form/SelectOptions/OcSelectOptions.js +1 -1
- package/dist/Form/SingleFileUpload/OcSingleFileUpload.js +1 -1
- package/dist/Form/Slider/OcSlider.js +1 -1
- package/dist/Form/TextArea/OcTextArea.js +1 -1
- package/dist/Form/Toggle/OcToggle.js +1 -1
- package/dist/Form/index.js +2 -2
- package/dist/FormBuilder/OcFormBuilder.js +1 -1
- package/dist/MediaAndIcons/Avatar/OcAvatar.js +1 -1
- package/dist/MediaAndIcons/Icon/OcIcon.js +1 -1
- package/dist/{OcAccountSetupProgress-CGu2mGjb.js → OcAccountSetupProgress-ChgQjAwg.js} +8 -3
- package/dist/{OcAvatar-DA33kM1x.js → OcAvatar-Dh-N5cDF.js} +8 -0
- package/dist/{OcComplexCalendar-BLDUMYfD.js → OcComplexCalendar-D-iZlAWP.js} +2 -2
- package/dist/{OcComplexDatePicker-DR_rDx_k.js → OcComplexDatePicker-DWO_fE5x.js} +1 -1
- package/dist/{OcCropper-DWLjgt8P.js → OcCropper-Cj_9uRUe.js} +2 -2
- package/dist/{OcDataTable-DdYe3d9A.js → OcDataTable-BnRVGVHc.js} +64 -3
- package/dist/{OcDraggable-C-RjArcr.js → OcDraggable-5y_FiZHv.js} +3 -0
- package/dist/{OcDraggableList-C8ulvqkC.js → OcDraggableList-BcuXDoyP.js} +15 -3
- package/dist/{OcEmojiPicker-PI_T1ZAi.js → OcEmojiPicker-9X_3e2et.js} +1 -1
- package/dist/{OcFilterForm-BD4F_p_-.js → OcFilterForm-CGsddHdW.js} +17 -2
- package/dist/{OcFilterSearch-CrI7tLww.js → OcFilterSearch-qpRKNVkC.js} +8 -2
- package/dist/{OcFilterSearchFor-ByVyGsvL.js → OcFilterSearchFor-BnKlN3Cr.js} +6 -1
- package/dist/{OcHorizontalProgressbar-DapCdBDF.js → OcHorizontalProgressbar-ClgiRxAb.js} +3 -0
- package/dist/{OcIcon-BedshzZm.js → OcIcon-DuLjS3TV.js} +4 -0
- package/dist/{OcModalCropper-CtDRlDMK.js → OcModalCropper-D1xoK4y5.js} +14 -3
- package/dist/{OcPopper-DAh56I2b.js → OcPopper-4s9J9wmd.js} +9 -1
- package/dist/{OcProgressBar-lyqE5LZd.js → OcProgressBar-MTSaIZCf.js} +3 -0
- package/dist/{OcSection-BjyapRr3.js → OcSection-DaXJy5P1.js} +1 -0
- package/dist/{OcSwitchTabs-B7LfmG3z.js → OcSwitchTabs-CmwaBCBs.js} +11 -6
- package/dist/{OcTag-CuzgktNM.js → OcTag-H1qaGHcE.js} +5 -0
- package/dist/{OcTheme-B6NTNYtz.js → OcTheme-CveJ_GMF.js} +4 -0
- package/dist/{OcTimePicker-eeXUndiL.js → OcTimePicker-C2_ADPGZ.js} +1 -1
- package/dist/{OcTimePopup-CrwbZ_Nx.js → OcTimePopup-D0LECk6H.js} +6 -2
- package/dist/{OcToggle-DOfA-DZ8.js → OcToggle-CoI4QOGs.js} +11 -6
- package/dist/Overlay/ConfirmationModal/OcConfirmationModal.js +1 -1
- package/dist/Overlay/CopyTooltip/OcCopyTooltip.js +1 -1
- package/dist/Overlay/Dropdown/OcDropdown.js +1 -1
- package/dist/Overlay/Modal/OcModal.js +1 -1
- package/dist/Overlay/Popper/OcPopper.js +1 -1
- package/dist/Overlay/SupportMenu/OcSupportMenu.js +1 -1
- package/dist/Overlay/Tooltip/OcTooltip.js +1 -1
- package/dist/Overlay/Whitelist/OcWhiteList.js +1 -1
- package/dist/{SubPlanCard-DpgwNokp.js → SubPlanCard-D5nygne_.js} +9 -4
- package/dist/Theme/OcTheme.js +1 -1
- package/dist/{ThumbnailSection-DPgr2Yye.js → ThumbnailSection-Dj815szY.js} +8 -2
- package/dist/{ThumbnailTheme-BD8IIMJS.js → ThumbnailTheme-CYvjiMCg.js} +17 -3
- package/dist/composables/helpers.js +4 -45
- package/dist/core.css +1 -1
- package/dist/{index-CH6HqHCV.js → index-CCGmnLvC.js} +6432 -4829
- package/dist/index.js +11 -11
- package/package.json +1 -1
- package/dist/data/Validator.js +0 -5
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { ref as C, onMounted as Se, createBlock as L, openBlock as o, unref as i, withCtx as p, createVNode as I, createElementVNode as q, createElementBlock as x, createCommentVNode as f, mergeProps as ye, Fragment as ae, renderList as ee, normalizeClass as te, toDisplayString as ge, computed as T, watch as ke, toRaw as Ge, nextTick as Me, renderSlot as E, resolveDynamicComponent as We, createSlots as Xe, normalizeProps as be, guardReactiveProps as he } from "vue";
|
|
2
|
-
import { aG as Oe, B as Ve, C as Ye, E as Ze, Q as He, a4 as _e, aR as el, aS as ll, aT as al, K as tl, L as we, j as sl } from "./index-
|
|
2
|
+
import { aG as Oe, B as Ve, C as Ye, E as Ze, Q as He, a4 as _e, aR as el, aS as ll, aT as al, K as tl, L as we, j as sl } from "./index-CCGmnLvC.js";
|
|
3
3
|
import { V as xe } from "./vue-draggable-next.esm-bundler-QQ8zx__3.js";
|
|
4
4
|
import { getFromLocalStorage as Fe, formatHeadersFromLocalStorage as Ee, formatHeadersToLocalStorage as ol, setInLocalStorage as ul } from "./DataTable/utils/editColumnsUtils.js";
|
|
5
|
-
import { _ as $e } from "./OcIcon-
|
|
5
|
+
import { _ as $e } from "./OcIcon-DuLjS3TV.js";
|
|
6
6
|
import { formatFilterDisplay as il, clearAllFilters as rl } from "./DataTable/utils/filterUtils.js";
|
|
7
7
|
import { formatCustomItemsPerPageOptions as nl, getItemsPerPageOptions as dl } from "./DataTable/utils/paginationUtils.js";
|
|
8
8
|
import "./dayjs.min-7xVZzECu.js";
|
|
@@ -15,20 +15,30 @@ const vl = { class: "p-5 gap-y-4 text-sm flex w-[250px] flex-col" }, cl = {
|
|
|
15
15
|
}, fl = { class: "flex items-center w-full gap-x-3" }, yl = { class: "truncate w-full max-w-[160px]" }, gl = {
|
|
16
16
|
__name: "ColumnEdit",
|
|
17
17
|
props: {
|
|
18
|
+
/** Initial active/visible state overrides for columns. Keyed by column key. */
|
|
18
19
|
options: {
|
|
19
20
|
type: Object,
|
|
20
21
|
default: () => ({})
|
|
21
22
|
},
|
|
23
|
+
/** Full list of column header objects — each with `key`, `label`, and optional `isActive`. */
|
|
22
24
|
headers: {
|
|
23
25
|
type: Array,
|
|
24
26
|
default: () => []
|
|
25
27
|
},
|
|
28
|
+
/** localStorage key used to persist the column order and visibility across sessions. */
|
|
26
29
|
localKey: {
|
|
27
30
|
type: String,
|
|
28
31
|
default: ""
|
|
29
32
|
}
|
|
30
33
|
},
|
|
31
|
-
emits:
|
|
34
|
+
emits: {
|
|
35
|
+
/** A column's active state was toggled. Payload: column header object. */
|
|
36
|
+
"change-active": [],
|
|
37
|
+
/** A column was reordered via drag. Payload: move event. */
|
|
38
|
+
onMoved: [],
|
|
39
|
+
/** Column order or visibility changed. Payload: `{ fixedHeaders, activeHeaders, isOnMount }`. */
|
|
40
|
+
"update-order": []
|
|
41
|
+
},
|
|
32
42
|
setup($, { emit: le }) {
|
|
33
43
|
const j = le, g = $, c = C([]), S = C([]), O = C(!1), y = {
|
|
34
44
|
handle: ".drag-el",
|
|
@@ -157,49 +167,100 @@ const vl = { class: "p-5 gap-y-4 text-sm flex w-[250px] flex-col" }, cl = {
|
|
|
157
167
|
}, Al = {
|
|
158
168
|
__name: "OcDataTable",
|
|
159
169
|
props: {
|
|
170
|
+
/** Show skeleton loading rows while data is being fetched. */
|
|
160
171
|
isLoading: Boolean,
|
|
172
|
+
/**
|
|
173
|
+
* Unique ID for this table instance. Used as a localStorage namespace when columnEdit is enabled.
|
|
174
|
+
*/
|
|
161
175
|
id: {
|
|
162
176
|
type: String,
|
|
163
177
|
required: !0
|
|
164
178
|
},
|
|
179
|
+
/**
|
|
180
|
+
* Full configuration object for the table.
|
|
181
|
+
*
|
|
182
|
+
* `tableOptions` — table structure:
|
|
183
|
+
* - `headers` — array of `{ key, label, variant?, class?, isCopy?, stickyLeft?, stickyRight?, chipOptions?, disableClickRow? }`
|
|
184
|
+
* - `fields` — array of row data objects keyed to header keys
|
|
185
|
+
* - `isSelectable` — show row checkboxes
|
|
186
|
+
* - `isCursorPointer` — cursor:pointer on rows
|
|
187
|
+
* - `isSticky` — horizontal scroll with sticky first column
|
|
188
|
+
* - `isBorderless` — remove outer border
|
|
189
|
+
*
|
|
190
|
+
* `filterOptions` (optional) — filter toolbar config:
|
|
191
|
+
* - `search` — `{ key, options? }` enables search bar
|
|
192
|
+
* - `form` — FormBuilder jsonForm array rendered in the filter dropdown
|
|
193
|
+
* - `tabs` — `{ key, options }` tab bar above the table
|
|
194
|
+
* - `per_page` — `{ key }` controls which filter key holds items-per-page
|
|
195
|
+
* - `columnEdit` — `{ key, localStorageKey }` enables column show/hide editor
|
|
196
|
+
*
|
|
197
|
+
* `pagination` — `{ total, last_page }` for numbered pagination; omit for cursor mode.
|
|
198
|
+
* `cursor` — `{ prev, next }` cursor strings for cursor-based navigation.
|
|
199
|
+
* `perPageOptions` — custom per-page dropdown options.
|
|
200
|
+
* `hidePerPageDropdown` — hide the per-page selector.
|
|
201
|
+
*/
|
|
165
202
|
options: {
|
|
166
203
|
type: Object,
|
|
167
204
|
required: !0
|
|
168
205
|
},
|
|
206
|
+
/**
|
|
207
|
+
* Current filter state object (v-model:filter). Includes page, per_page, search query, tab value, etc.
|
|
208
|
+
* The component emits `update:filter` whenever filters change.
|
|
209
|
+
*/
|
|
169
210
|
filter: {
|
|
170
211
|
type: Object,
|
|
171
212
|
default: () => ({})
|
|
172
213
|
},
|
|
214
|
+
/** Currently selected rows array (v-model:selected). Each item is a row data object from fields. */
|
|
173
215
|
selected: {
|
|
174
216
|
type: Array,
|
|
175
217
|
required: !1
|
|
176
218
|
},
|
|
219
|
+
/** CSS class or function `(row, index) => string` applied to each data row element. */
|
|
177
220
|
rowClass: String,
|
|
221
|
+
/**
|
|
222
|
+
* Field name or function used to uniquely identify each row.
|
|
223
|
+
* If a string, `row[rowKey]` is used. If a function, receives the row and returns a key.
|
|
224
|
+
*/
|
|
178
225
|
rowKey: {
|
|
179
226
|
type: [String, Function],
|
|
180
227
|
default: "id"
|
|
181
228
|
},
|
|
229
|
+
/** Field name in each row data object containing the URL to navigate to on row click. */
|
|
182
230
|
rowLink: String,
|
|
231
|
+
/** Use the new table design (NewTable component) instead of the classic Table. */
|
|
183
232
|
isNewTable: {
|
|
184
233
|
type: Boolean,
|
|
185
234
|
default: !1
|
|
186
235
|
},
|
|
236
|
+
/** Highlight a specific row by index (0-based). Set -1 to clear. */
|
|
187
237
|
selectedIndex: {
|
|
188
238
|
type: Number,
|
|
189
239
|
default: -1
|
|
190
240
|
}
|
|
191
241
|
},
|
|
192
242
|
emits: {
|
|
243
|
+
/** Selected rows changed. Payload: array of selected row objects (v-model:selected). */
|
|
193
244
|
"update:selected": [],
|
|
245
|
+
/** Filter state changed. Payload: current filter object (v-model:filter). */
|
|
194
246
|
"update:filter": [],
|
|
247
|
+
/** Emitted alongside update:filter after every filter action. Payload: current filter object. */
|
|
195
248
|
"apply-filter": [],
|
|
249
|
+
/** A row cell was clicked. Payload: `{ field, header }`. */
|
|
196
250
|
"click:row": [],
|
|
251
|
+
/** A filter form field value changed. Payload: `{ form, value }`. */
|
|
197
252
|
"filter-fields-changed": [],
|
|
253
|
+
/** A filter tag was dismissed. Payload: the removed filter field key. */
|
|
198
254
|
"filter-removed": [],
|
|
255
|
+
/** Filter dropdown opened or closed. Payload: boolean. */
|
|
199
256
|
"filter-open": [],
|
|
257
|
+
/** Search query was submitted or cleared. Payload: query string. */
|
|
200
258
|
"search-query-changed": [],
|
|
259
|
+
/** A table cell was hovered. Payload: `{ item, key }`. */
|
|
201
260
|
"hover:cell": [],
|
|
261
|
+
/** Column visibility or order changed via the column editor. Payload: active headers array. */
|
|
202
262
|
"columns-changed": [],
|
|
263
|
+
/** Table has mounted and column order is initialized. */
|
|
203
264
|
"on-table-ready": []
|
|
204
265
|
},
|
|
205
266
|
setup($, { emit: le }) {
|
|
@@ -3,10 +3,13 @@ import { V as f } from "./vue-draggable-next.esm-bundler-QQ8zx__3.js";
|
|
|
3
3
|
const _ = {
|
|
4
4
|
__name: "OcDraggable",
|
|
5
5
|
props: {
|
|
6
|
+
/** v-model — the array of items to make draggable. Updated in-place when items are reordered. */
|
|
6
7
|
modelValue: Array
|
|
7
8
|
},
|
|
8
9
|
emits: {
|
|
10
|
+
/** Item order changed. Payload: `(newList, event)` — the reordered array and the vue-draggable event. */
|
|
9
11
|
"update:modelValue": [],
|
|
12
|
+
/** An item is being dragged over another position. Used to restrict or allow drops. */
|
|
10
13
|
detectMove: null
|
|
11
14
|
},
|
|
12
15
|
setup(o, { emit: l }) {
|
|
@@ -1,36 +1,48 @@
|
|
|
1
1
|
import { ref as w, createBlock as y, openBlock as c, unref as l, withCtx as r, createElementBlock as b, Fragment as C, renderList as $, normalizeClass as s, createElementVNode as o, createCommentVNode as m, renderSlot as u, toDisplayString as x, createVNode as f } from "vue";
|
|
2
|
-
import { aP as D, aL as S, aG as B } from "./index-
|
|
3
|
-
import { _ as g } from "./OcIcon-
|
|
2
|
+
import { aP as D, aL as S, aG as B } from "./index-CCGmnLvC.js";
|
|
3
|
+
import { _ as g } from "./OcIcon-DuLjS3TV.js";
|
|
4
4
|
const M = ["onMouseleave", "onMouseover", "onClick"], L = { class: "flex justify-evenly w-full" }, N = { class: "flex w-full" }, U = { class: "ml-4 flex w-full" }, E = { class: "flex items-center flex-wrap w-full" }, O = ["href"], W = { class: "min-w-[120px]" }, j = { class: "truncate w-[200px]" }, z = { class: "flex items-center ml-4" }, A = { class: "flex w-full" }, P = {
|
|
5
5
|
__name: "OcDraggableList",
|
|
6
6
|
props: {
|
|
7
|
+
/** v-model — array of list item objects. Reordering updates this array. */
|
|
7
8
|
modelValue: Array,
|
|
9
|
+
/** Object key used to read the icon name from each item. Default: `'icon'`. */
|
|
8
10
|
iconKey: {
|
|
9
11
|
type: String,
|
|
10
12
|
default: "icon"
|
|
11
13
|
},
|
|
14
|
+
/** Mark this list as a nested child list — affects styling (no background, icon always visible). */
|
|
12
15
|
isChildren: Boolean,
|
|
16
|
+
/** Object key used to read nested child items from each item. Default: `'children'`. */
|
|
13
17
|
childrenKey: {
|
|
14
18
|
type: String,
|
|
15
19
|
default: "children"
|
|
16
20
|
},
|
|
21
|
+
/** Enable link display for items that have a link property. */
|
|
17
22
|
isLink: Boolean,
|
|
23
|
+
/** Object key used to read the URL from each item when isLink is true. Default: `'link'`. */
|
|
18
24
|
linkKey: {
|
|
19
25
|
type: String,
|
|
20
26
|
default: "link"
|
|
21
27
|
},
|
|
28
|
+
/** Disable drag-and-drop for all items in this list. */
|
|
22
29
|
unmovable: Boolean,
|
|
23
|
-
|
|
30
|
+
/** Apply inactive styling (gray background) for items where `active === false`. */
|
|
24
31
|
enableStatusVariant: Boolean,
|
|
32
|
+
/** Extra Tailwind classes applied to each list item card. */
|
|
25
33
|
classes: {
|
|
26
34
|
type: String,
|
|
27
35
|
default: ""
|
|
28
36
|
},
|
|
37
|
+
/** Tailwind width class applied to the title text container (e.g. `'w-[200px]'`). */
|
|
29
38
|
titleWidth: String
|
|
30
39
|
},
|
|
31
40
|
emits: {
|
|
41
|
+
/** Item order changed. Payload: `(newList, changedElement)`. */
|
|
32
42
|
"update:modelValue": [],
|
|
43
|
+
/** A list item was clicked. Payload: the item object. */
|
|
33
44
|
"click:element": [],
|
|
45
|
+
/** Drag-over event fired — use to allow/deny drops. */
|
|
34
46
|
detectMove: null
|
|
35
47
|
},
|
|
36
48
|
setup(t, { emit: p }) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ref as m, computed as p, createElementBlock as l, openBlock as s, createVNode as f, createBlock as N, createCommentVNode as z, unref as c, withCtx as v, createElementVNode as n, normalizeClass as T, Fragment as V, renderList as k, createTextVNode as C } from "vue";
|
|
2
|
-
import { aG as U, d as G, B as b } from "./index-
|
|
2
|
+
import { aG as U, d as G, B as b } from "./index-CCGmnLvC.js";
|
|
3
3
|
import { EMOJI_LIST as a, EMOJI_CATEGORIES as J } from "./Form/EmojiPicker/conts/emoji.js";
|
|
4
4
|
import { _ as P } from "./_plugin-vue_export-helper-CHgC5LLL.js";
|
|
5
5
|
const A = { class: "flex items-center justify-center rounded bg-oc-bg-dark h-[140px] relative w-full z-50" }, F = ["innerHTML"], R = { class: "p-4 w-[340px]" }, q = { class: "bg-oc-bg-dark p-4 rounded flex items-center justify-center" }, K = ["innerHTML"], Q = { class: "pt-3 pb-4" }, W = ["id", "innerHTML", "onClick"], X = {
|
|
@@ -1,27 +1,42 @@
|
|
|
1
1
|
import { ref as r, computed as u, onMounted as B, createElementBlock as O, openBlock as k, renderSlot as $, createElementVNode as f, createVNode as c, unref as i } from "vue";
|
|
2
|
-
import { t as w, B as m } from "./index-
|
|
2
|
+
import { t as w, B as m } from "./index-CCGmnLvC.js";
|
|
3
3
|
const C = { class: "flex w-[326px] flex-col gap-y-5" }, A = { class: "max-h-[500px] overflow-y-auto p-5" }, E = { class: "flex gap-x-5 px-5 pb-5" }, N = {
|
|
4
4
|
__name: "OcFilterForm",
|
|
5
5
|
props: {
|
|
6
|
+
/** Unique ID passed to the inner FormBuilder instance. */
|
|
6
7
|
id: {
|
|
7
8
|
type: String,
|
|
8
9
|
required: !0
|
|
9
10
|
},
|
|
11
|
+
/** FormBuilder field config array. Same shape as `FormBuilder.jsonForm`. */
|
|
10
12
|
jsonForm: {
|
|
11
13
|
type: Array
|
|
12
14
|
},
|
|
15
|
+
/** Initial form values. Merged into local state on mount. */
|
|
13
16
|
values: {
|
|
14
17
|
type: Object
|
|
15
18
|
},
|
|
19
|
+
/**
|
|
20
|
+
* Override labels for the action buttons.
|
|
21
|
+
* Shape: `{ applyButton: { label }, cancelButton: { label } }`.
|
|
22
|
+
*/
|
|
16
23
|
actions: {
|
|
17
24
|
type: Object
|
|
18
25
|
},
|
|
26
|
+
/** Optional responsive grid layout passed to the inner FormBuilder. */
|
|
19
27
|
grid: {
|
|
20
28
|
type: Object,
|
|
21
29
|
default: null
|
|
22
30
|
}
|
|
23
31
|
},
|
|
24
|
-
emits:
|
|
32
|
+
emits: {
|
|
33
|
+
/** Apply button clicked. Payload: current form values object. */
|
|
34
|
+
applyFilter: [],
|
|
35
|
+
/** Cancel button clicked. */
|
|
36
|
+
cancel: [],
|
|
37
|
+
/** Tracks which fields were changed before Apply. Payload: array of changed field names. */
|
|
38
|
+
"filter-fields-changed": []
|
|
39
|
+
},
|
|
25
40
|
setup(t, { emit: y }) {
|
|
26
41
|
const s = t, d = y, a = r({}), p = r({}), n = r([]), b = u(() => Object.values(a.value).length > 0), g = u(() => {
|
|
27
42
|
var e, l;
|
|
@@ -1,16 +1,22 @@
|
|
|
1
1
|
import { ref as u, computed as K, createElementBlock as d, openBlock as s, Fragment as p, createElementVNode as r, createCommentVNode as f, normalizeClass as O, createVNode as m, unref as c, withKeys as N, createSlots as Q, withCtx as h, toDisplayString as D, renderList as E, createBlock as S, nextTick as F } from "vue";
|
|
2
|
-
import { d as I, aG as U, aH as j, B as w } from "./index-
|
|
3
|
-
import { _ as q } from "./OcIcon-
|
|
2
|
+
import { d as I, aG as U, aH as j, B as w } from "./index-CCGmnLvC.js";
|
|
3
|
+
import { _ as q } from "./OcIcon-DuLjS3TV.js";
|
|
4
4
|
const A = { class: "flex gap-x-4" }, G = { class: "flex gap-x-2 items-center pl-2 text-oc-text-400 font-medium text-sm" }, H = { class: "p-2 flex flex-col" }, P = {
|
|
5
5
|
__name: "OcFilterSearch",
|
|
6
6
|
props: {
|
|
7
|
+
/** Show the search bar permanently (no expand/collapse toggle). */
|
|
7
8
|
isSearchOnly: Boolean,
|
|
9
|
+
/** Field options for the search-key dropdown. Array of `{ label, value }`. When empty, no dropdown is shown. */
|
|
8
10
|
searchOptions: Array,
|
|
11
|
+
/** Currently selected search field value — must match one of the `searchOptions` values. */
|
|
9
12
|
selectedOption: String
|
|
10
13
|
},
|
|
11
14
|
emits: {
|
|
15
|
+
/** User submitted a search term. Payload: query string. */
|
|
12
16
|
addQuery: [],
|
|
17
|
+
/** Search bar expanded or collapsed. Payload: boolean. */
|
|
13
18
|
toggle: [],
|
|
19
|
+
/** User selected a different search field from the dropdown. Payload: option value string. */
|
|
14
20
|
"change-search-key": []
|
|
15
21
|
},
|
|
16
22
|
setup(a, { emit: C }) {
|
|
@@ -1,20 +1,25 @@
|
|
|
1
1
|
import { computed as h, createBlock as c, createCommentVNode as k, openBlock as a, unref as o, withCtx as y, createElementVNode as f, createElementBlock as v, createVNode as F, Fragment as p, renderList as b } from "vue";
|
|
2
|
-
import { T as $, aB as m } from "./index-
|
|
2
|
+
import { T as $, aB as m } from "./index-CCGmnLvC.js";
|
|
3
3
|
const w = { class: "flex gap-1 items-center normal-case flex-wrap" }, E = {
|
|
4
4
|
__name: "OcFilterSearchFor",
|
|
5
5
|
props: {
|
|
6
|
+
/** Applied filter chips. Array of `{ name, label, multiNames? }` objects from `formatFilterDisplay`. */
|
|
6
7
|
filters: {
|
|
7
8
|
type: Object,
|
|
8
9
|
default: () => ({})
|
|
9
10
|
},
|
|
11
|
+
/** Active search query strings shown as chips. */
|
|
10
12
|
queries: {
|
|
11
13
|
type: Object,
|
|
12
14
|
default: () => ({})
|
|
13
15
|
}
|
|
14
16
|
},
|
|
15
17
|
emits: {
|
|
18
|
+
/** A search query chip was dismissed. Payload: query string. */
|
|
16
19
|
removeQuery: [],
|
|
20
|
+
/** A filter chip was dismissed. Payload: `(filterObject, fieldName)`. */
|
|
17
21
|
removeFilter: [],
|
|
22
|
+
/** "Clear all" chip was clicked. */
|
|
18
23
|
removeAll: []
|
|
19
24
|
},
|
|
20
25
|
setup(s, { emit: d }) {
|
|
@@ -2,14 +2,17 @@ import { createElementBlock as l, openBlock as r, createElementVNode as t, toDis
|
|
|
2
2
|
const o = { class: "flex items-center gap-x-3" }, s = { class: "text-oc-text-400 text-sm shrink-0" }, c = { class: "w-full rounded-full bg-oc-gray-100 h-[8px] overflow-hidden" }, m = {
|
|
3
3
|
__name: "OcHorizontalProgressbar",
|
|
4
4
|
props: {
|
|
5
|
+
/** Label text shown to the left of the progress bar. */
|
|
5
6
|
label: {
|
|
6
7
|
type: String,
|
|
7
8
|
default: ""
|
|
8
9
|
},
|
|
10
|
+
/** Maximum value (denominator) for the progress calculation. */
|
|
9
11
|
max: {
|
|
10
12
|
type: Number,
|
|
11
13
|
default: 0
|
|
12
14
|
},
|
|
15
|
+
/** Current value — bar fills to `(current / max) * 100%`. */
|
|
13
16
|
current: {
|
|
14
17
|
type: Number,
|
|
15
18
|
default: 0
|
|
@@ -2,18 +2,22 @@ import { ref as s, onMounted as l, nextTick as a, watch as w, createElementBlock
|
|
|
2
2
|
const f = ["width", "height", "viewBox"], v = {
|
|
3
3
|
__name: "OcIcon",
|
|
4
4
|
props: {
|
|
5
|
+
/** Base URL path where SVG icon files are served from. */
|
|
5
6
|
path: {
|
|
6
7
|
type: String,
|
|
7
8
|
default: "/icons/orchidui"
|
|
8
9
|
},
|
|
10
|
+
/** Icon file name (without `.svg` extension). Fetched from `{path}/{name}.svg`. */
|
|
9
11
|
name: {
|
|
10
12
|
type: String,
|
|
11
13
|
required: !0
|
|
12
14
|
},
|
|
15
|
+
/** Width of the rendered SVG in pixels. */
|
|
13
16
|
width: {
|
|
14
17
|
type: [String, Number],
|
|
15
18
|
default: "24"
|
|
16
19
|
},
|
|
20
|
+
/** Height of the rendered SVG in pixels. */
|
|
17
21
|
height: {
|
|
18
22
|
type: [String, Number],
|
|
19
23
|
default: "24"
|
|
@@ -1,15 +1,26 @@
|
|
|
1
1
|
import { ref as o, createBlock as v, openBlock as d, unref as r, withCtx as x, createVNode as O } from "vue";
|
|
2
|
-
import { aI as b } from "./index-
|
|
3
|
-
import k from "./OcCropper-
|
|
2
|
+
import { aI as b } from "./index-CCGmnLvC.js";
|
|
3
|
+
import k from "./OcCropper-Cj_9uRUe.js";
|
|
4
4
|
const h = {
|
|
5
5
|
__name: "OcModalCropper",
|
|
6
6
|
props: {
|
|
7
|
+
/** Additional input field configs shown inside the cropper (e.g. alt text). Array of field definitions. */
|
|
7
8
|
inputOptions: Array,
|
|
9
|
+
/** Current values for the `inputOptions` fields. Object keyed by field name. */
|
|
8
10
|
inputOptionValues: Object,
|
|
11
|
+
/** Source image URL to load into the cropper. */
|
|
9
12
|
img: String,
|
|
13
|
+
/** Maximum allowed file size in bytes. Passed through to the Cropper. */
|
|
10
14
|
maxSize: [String, Number]
|
|
11
15
|
},
|
|
12
|
-
emits:
|
|
16
|
+
emits: {
|
|
17
|
+
/** Save clicked with a cropped image. Payload: `{ url, cropper }`. */
|
|
18
|
+
changeImage: [],
|
|
19
|
+
/** Modal closed without saving. */
|
|
20
|
+
close: [],
|
|
21
|
+
/** An `inputOptions` field value changed. Payload: new value. */
|
|
22
|
+
"update:input-options": []
|
|
23
|
+
},
|
|
13
24
|
setup(e, { emit: l }) {
|
|
14
25
|
const c = e, t = l, p = o();
|
|
15
26
|
o();
|
|
@@ -903,35 +903,43 @@ var Br = [Jt, vr, Ut, Mt, lr, ir, mr, It, fr], Dr = /* @__PURE__ */ Pr({
|
|
|
903
903
|
const jr = { class: "flex w-[inherit]" }, Cr = {
|
|
904
904
|
__name: "OcPopper",
|
|
905
905
|
props: {
|
|
906
|
+
/** Popper.js placement string (e.g. `'bottom'`, `'top-start'`, `'right-end'`). */
|
|
906
907
|
placement: {
|
|
907
908
|
type: String,
|
|
908
909
|
required: !0
|
|
909
910
|
},
|
|
910
911
|
/**
|
|
911
|
-
*
|
|
912
|
+
* Additional options passed directly to the Popper.js instance.
|
|
913
|
+
* See https://popper.js.org/docs/v2/modifiers/ for available modifiers.
|
|
912
914
|
*/
|
|
913
915
|
popperOptions: {
|
|
914
916
|
type: Object
|
|
915
917
|
},
|
|
918
|
+
/** Inline CSS styles applied to the popper container element. */
|
|
916
919
|
popperStyle: {
|
|
917
920
|
type: Object
|
|
918
921
|
},
|
|
922
|
+
/** Horizontal shift of the popper relative to the reference element (px). */
|
|
919
923
|
skidding: {
|
|
920
924
|
type: Number,
|
|
921
925
|
default: 0
|
|
922
926
|
},
|
|
927
|
+
/** Vertical distance between the reference element and the popper panel (px). */
|
|
923
928
|
distance: {
|
|
924
929
|
type: [String, Number],
|
|
925
930
|
default: 5
|
|
926
931
|
},
|
|
932
|
+
/** Allow the popper to flip to the opposite side when it would overflow the viewport. */
|
|
927
933
|
isFlipEnabled: {
|
|
928
934
|
type: Boolean,
|
|
929
935
|
default: !0
|
|
930
936
|
},
|
|
937
|
+
/** CSS class(es) applied to the popper container element. */
|
|
931
938
|
popperClass: {
|
|
932
939
|
type: [String, Array, Object],
|
|
933
940
|
default: ""
|
|
934
941
|
},
|
|
942
|
+
/** Teleport the popper panel to `document.body` (required inside overflow:hidden containers). */
|
|
935
943
|
isAttachToBody: {
|
|
936
944
|
type: Boolean,
|
|
937
945
|
default: !1
|
|
@@ -5,14 +5,17 @@ const d = {
|
|
|
5
5
|
}, b = { class: "w-full flex align-center justify-center gap-2" }, f = {
|
|
6
6
|
__name: "OcProgressBar",
|
|
7
7
|
props: {
|
|
8
|
+
/** Total number of pill segments to render. */
|
|
8
9
|
steps: {
|
|
9
10
|
type: Number,
|
|
10
11
|
required: !0
|
|
11
12
|
},
|
|
13
|
+
/** Index of the last completed step (1-based). Segments up to this index are filled. */
|
|
12
14
|
currentStep: {
|
|
13
15
|
type: Number,
|
|
14
16
|
default: 1
|
|
15
17
|
},
|
|
18
|
+
/** Optional label text shown above the progress bar. */
|
|
16
19
|
label: String
|
|
17
20
|
},
|
|
18
21
|
setup(e) {
|
|
@@ -2,6 +2,7 @@ import { createElementBlock as o, openBlock as i, createElementVNode as n, rende
|
|
|
2
2
|
const c = { class: "oc-section" }, a = { class: "font-medium text-lg flex" }, d = { key: 0 }, m = { class: "mt-5" }, p = {
|
|
3
3
|
__name: "OcSection",
|
|
4
4
|
props: {
|
|
5
|
+
/** Section heading text shown in the header when no custom `header` slot is provided. */
|
|
5
6
|
title: {
|
|
6
7
|
type: String,
|
|
7
8
|
required: !1
|
|
@@ -1,25 +1,30 @@
|
|
|
1
|
-
import { createElementBlock as r, openBlock as n, Fragment as
|
|
1
|
+
import { createElementBlock as r, openBlock as n, Fragment as s, renderList as i, normalizeClass as a, createElementVNode as o, toDisplayString as c } from "vue";
|
|
2
2
|
const u = { class: "flex items-center gap-2 p-2 rounded-full shadow-inner border border-oc-gray-200" }, d = ["onClick"], y = {
|
|
3
3
|
__name: "OcSwitchTabs",
|
|
4
4
|
props: {
|
|
5
|
+
/** Array of tab option objects, each with `value` and `label` fields. */
|
|
5
6
|
options: {
|
|
6
7
|
type: Array,
|
|
7
8
|
required: !0
|
|
8
9
|
},
|
|
10
|
+
/** Value of the currently selected option. */
|
|
9
11
|
activeOption: {
|
|
10
12
|
type: String,
|
|
11
13
|
default: ""
|
|
12
14
|
}
|
|
13
15
|
},
|
|
14
|
-
emits:
|
|
16
|
+
emits: {
|
|
17
|
+
/** A tab was clicked. Payload: the `value` of the selected option. */
|
|
18
|
+
select: null
|
|
19
|
+
},
|
|
15
20
|
setup(t) {
|
|
16
|
-
return (
|
|
17
|
-
(n(!0), r(
|
|
21
|
+
return (l, m) => (n(), r("div", u, [
|
|
22
|
+
(n(!0), r(s, null, i(t.options, (e) => (n(), r("div", {
|
|
18
23
|
key: e.value,
|
|
19
24
|
class: a(["rounded-full cursor-pointer py-3 px-4 transition duration-300 border-2 border-transparent", { "bg-oc-gray-800": e.value === t.activeOption }]),
|
|
20
|
-
onClick: (p) =>
|
|
25
|
+
onClick: (p) => l.$emit("select", e.value)
|
|
21
26
|
}, [
|
|
22
|
-
|
|
27
|
+
o("span", {
|
|
23
28
|
class: a(["text-oc-text-300 font-medium text-sm", { "text-white": e.value === t.activeOption }])
|
|
24
29
|
}, c(e.label), 3)
|
|
25
30
|
], 10, d))), 128))
|
|
@@ -2,10 +2,15 @@ import { createElementBlock as a, openBlock as n, normalizeClass as r, toDisplay
|
|
|
2
2
|
const o = {
|
|
3
3
|
__name: "OcTag",
|
|
4
4
|
props: {
|
|
5
|
+
/**
|
|
6
|
+
* Color variant of the tag.
|
|
7
|
+
* @values warning, accent-2
|
|
8
|
+
*/
|
|
5
9
|
variant: {
|
|
6
10
|
type: String,
|
|
7
11
|
default: "warning"
|
|
8
12
|
},
|
|
13
|
+
/** Text label displayed inside the tag. */
|
|
9
14
|
label: {
|
|
10
15
|
type: String,
|
|
11
16
|
default: ""
|
|
@@ -2,6 +2,10 @@ import { watch as r, createElementBlock as c, openBlock as s, renderSlot as l }
|
|
|
2
2
|
const a = { class: "orchid-ui bg-oc-bg-light text-oc-text-500" }, n = {
|
|
3
3
|
__name: "OcTheme",
|
|
4
4
|
props: {
|
|
5
|
+
/**
|
|
6
|
+
* Global color mode applied to the `<body>` element class.
|
|
7
|
+
* @values light, dark
|
|
8
|
+
*/
|
|
5
9
|
colorMode: {
|
|
6
10
|
type: String,
|
|
7
11
|
default: "light"
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ref as n, watch as g, createBlock as m, openBlock as s, unref as o, withCtx as p, createVNode as v, createCommentVNode as y } from "vue";
|
|
2
|
-
import { aG as S, d as h, aQ as D } from "./index-
|
|
2
|
+
import { aG as S, d as h, aQ as D } from "./index-CCGmnLvC.js";
|
|
3
3
|
import { d as c } from "./dayjs.min-7xVZzECu.js";
|
|
4
4
|
const w = {
|
|
5
5
|
__name: "OcTimePicker",
|
|
@@ -3,12 +3,16 @@ import { _ as R } from "./_plugin-vue_export-helper-CHgC5LLL.js";
|
|
|
3
3
|
const $ = { class: "overflow-hidden flex items-center relative rounded shadow-normal w-fit px-3" }, N = { class: "before:block after:block before:w-full before:h-[67px] after:w-full after:h-[67px]" }, F = ["onClick"], O = { class: "before:block after:block before:w-full before:h-[67px] after:w-full after:h-[67px]" }, z = ["onClick"], Y = { class: "before:block after:block before:w-full before:h-[67px] after:w-full after:h-[67px]" }, j = ["onClick"], G = {
|
|
4
4
|
__name: "OcTimePopup",
|
|
5
5
|
props: {
|
|
6
|
+
/** Current time value (v-model). Pass a `Date` object; the component reads hours, minutes, and AM/PM from it. */
|
|
6
7
|
modelValue: {
|
|
7
8
|
type: [String, Date],
|
|
8
9
|
default: () => /* @__PURE__ */ new Date()
|
|
9
10
|
}
|
|
10
11
|
},
|
|
11
|
-
emits:
|
|
12
|
+
emits: {
|
|
13
|
+
/** Time changed by scrolling or clicking a column. Payload: updated `Date` object. */
|
|
14
|
+
"update:modelValue": []
|
|
15
|
+
},
|
|
12
16
|
setup(A, { expose: H, emit: B }) {
|
|
13
17
|
const u = A, D = B, n = r(
|
|
14
18
|
u.modelValue.getHours() <= 12 ? u.modelValue.getHours() : u.modelValue.getHours() - 12
|
|
@@ -124,7 +128,7 @@ const $ = { class: "overflow-hidden flex items-center relative rounded shadow-no
|
|
|
124
128
|
], 544)
|
|
125
129
|
]));
|
|
126
130
|
}
|
|
127
|
-
}, K = /* @__PURE__ */ R(G, [["__scopeId", "data-v-
|
|
131
|
+
}, K = /* @__PURE__ */ R(G, [["__scopeId", "data-v-8c1d732d"]]);
|
|
128
132
|
export {
|
|
129
133
|
K as default
|
|
130
134
|
};
|
|
@@ -1,22 +1,27 @@
|
|
|
1
|
-
import { computed as s, createElementBlock as
|
|
1
|
+
import { computed as s, createElementBlock as c, openBlock as i, createElementVNode as l, createCommentVNode as b, normalizeClass as o, toDisplayString as f } from "vue";
|
|
2
2
|
import { _ as m } from "./_plugin-vue_export-helper-CHgC5LLL.js";
|
|
3
3
|
const g = { class: "inline-flex items-center gap-3 h-fit" }, h = ["value", "checked"], p = `absolute top-0 left-0 border border-transparent hover:bg-oc-primary-300 hover:border-oc-primary-500 bg-oc-primary-100 rounded-full cursor-pointer transition-all duration-300
|
|
4
4
|
before:transition-all before:duration-300 before:absolute before:rounded-full before:bg-oc-bg-light`, x = {
|
|
5
5
|
__name: "OcToggle",
|
|
6
6
|
props: {
|
|
7
|
+
/** Toggle state (v-model). `true` = on, `false` = off. */
|
|
7
8
|
modelValue: Boolean,
|
|
9
|
+
/** Disable the toggle — non-interactive, uses muted colors. */
|
|
8
10
|
disabled: Boolean,
|
|
11
|
+
/** Size preset — `'default'` or `'small'`. */
|
|
9
12
|
size: {
|
|
10
13
|
type: String,
|
|
11
14
|
default: "default"
|
|
12
15
|
},
|
|
16
|
+
/** Label text rendered to the right of the toggle. Clicking it also toggles. */
|
|
13
17
|
label: String
|
|
14
18
|
},
|
|
15
19
|
emits: {
|
|
20
|
+
/** Toggle state changed. Payload: new boolean value. */
|
|
16
21
|
"update:modelValue": []
|
|
17
22
|
},
|
|
18
|
-
setup(e, { emit:
|
|
19
|
-
const t = e, d =
|
|
23
|
+
setup(e, { emit: r }) {
|
|
24
|
+
const t = e, d = r, a = () => {
|
|
20
25
|
t.disabled || d("update:modelValue", !t.modelValue);
|
|
21
26
|
}, n = s(() => ({
|
|
22
27
|
default: "w-[42px] h-7",
|
|
@@ -25,7 +30,7 @@ const g = { class: "inline-flex items-center gap-3 h-fit" }, h = ["value", "chec
|
|
|
25
30
|
default: "before:w-6 before:h-6 before:top-px before:left-px",
|
|
26
31
|
small: " before:w-4 before:h-4 before:top-[0.5px] before:left-[0.5px]"
|
|
27
32
|
}));
|
|
28
|
-
return (v, V) => (
|
|
33
|
+
return (v, V) => (i(), c("div", g, [
|
|
29
34
|
l("label", {
|
|
30
35
|
class: o(["toggle-switch relative inline-block", [n.value[e.size], e.size, e.disabled ? "pointer-events-none" : ""]])
|
|
31
36
|
}, [
|
|
@@ -45,14 +50,14 @@ const g = { class: "inline-flex items-center gap-3 h-fit" }, h = ["value", "chec
|
|
|
45
50
|
}]])
|
|
46
51
|
}, null, 2)
|
|
47
52
|
], 2),
|
|
48
|
-
e.label ? (
|
|
53
|
+
e.label ? (i(), c("div", {
|
|
49
54
|
key: 0,
|
|
50
55
|
class: "text-sm cursor-pointer",
|
|
51
56
|
onClick: a
|
|
52
57
|
}, f(e.label), 1)) : b("", !0)
|
|
53
58
|
]));
|
|
54
59
|
}
|
|
55
|
-
}, z = /* @__PURE__ */ m(x, [["__scopeId", "data-v-
|
|
60
|
+
}, z = /* @__PURE__ */ m(x, [["__scopeId", "data-v-477f47c0"]]);
|
|
56
61
|
export {
|
|
57
62
|
z as T
|
|
58
63
|
};
|