seeder-st2110-components 1.2.6 → 1.2.7

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/index.css ADDED
@@ -0,0 +1 @@
1
+ .preset-management .w-full{width:100%}.preset-management .h-full{height:100%}.preset-management .h-auto{height:auto}.preset-management .p-0{padding:0}.preset-management .p-4{padding:16px}.preset-management .p-6{padding:24px}.preset-management .p-8{padding:32px}.preset-management .block{display:block}.preset-management .mx-auto{margin-left:auto;margin-right:auto}.preset-management .text-gray-400{color:#9ca3af}.preset-management .text-text-normal{color:#bfbfbf}.preset-management .grid{display:grid}.preset-management .grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.preset-management .grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.preset-management .ant-modal .ant-modal-content{padding:0}.preset-management .ant-modal-header{padding-block-start:24px;padding-inline:24px}.preset-management .ant-spin-nested-loading{margin-block-start:0}.preset-management .left-list-wrapper{display:flex;flex-direction:column;position:relative}.preset-management .left-list-wrapper:after{background-color:rgba(0,0,0,.3);bottom:0;content:"";display:block;position:absolute;right:0;top:0;width:1px}.preset-management .left-list-wrapper .list-container{flex:1;overflow-y:auto}.preset-management .left-list-wrapper .list-container::-webkit-scrollbar-track-piece{background:#282828;box-shadow:0 1px 1px 0 #282828}.preset-management .left-list-wrapper .list-container::-webkit-scrollbar{width:5px}.preset-management .left-list-wrapper .list-container::-webkit-scrollbar-thumb{background:#141414;border-radius:2em;box-shadow:0 1px 1px 0 #282828}.preset-management .left-list-wrapper .list-header{color:hsla(0,0%,100%,.75);font-weight:500;padding-block:4px;padding-inline:24px}.preset-management .left-list-wrapper .list-item{background-color:transparent;cursor:pointer;transition-duration:.15s;transition-property:background-color;transition-timing-function:cubic-bezier(.4,0,.2,1)}.preset-management .left-list-wrapper .list-item.selected{background-color:hsla(0,0%,100%,.12)}.preset-management .submit-btn-wrapper{bottom:0;left:0;margin-block-start:0;padding:16px 24px;position:absolute;right:0;text-align:right}
@@ -0,0 +1 @@
1
+ .preset-management .w-full{width:100%}.preset-management .h-full{height:100%}.preset-management .h-auto{height:auto}.preset-management .p-0{padding:0}.preset-management .p-4{padding:16px}.preset-management .p-6{padding:24px}.preset-management .p-8{padding:32px}.preset-management .block{display:block}.preset-management .mx-auto{margin-left:auto;margin-right:auto}.preset-management .text-gray-400{color:#9ca3af}.preset-management .text-text-normal{color:#bfbfbf}.preset-management .grid{display:grid}.preset-management .grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.preset-management .grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.preset-management .ant-modal .ant-modal-content{padding:0}.preset-management .ant-modal-header{padding-block-start:24px;padding-inline:24px}.preset-management .ant-spin-nested-loading{margin-block-start:0}.preset-management .left-list-wrapper{display:flex;flex-direction:column;position:relative}.preset-management .left-list-wrapper:after{background-color:rgba(0,0,0,.3);bottom:0;content:"";display:block;position:absolute;right:0;top:0;width:1px}.preset-management .left-list-wrapper .list-container{flex:1;overflow-y:auto}.preset-management .left-list-wrapper .list-container::-webkit-scrollbar-track-piece{background:#282828;box-shadow:0 1px 1px 0 #282828}.preset-management .left-list-wrapper .list-container::-webkit-scrollbar{width:5px}.preset-management .left-list-wrapper .list-container::-webkit-scrollbar-thumb{background:#141414;border-radius:2em;box-shadow:0 1px 1px 0 #282828}.preset-management .left-list-wrapper .list-header{color:hsla(0,0%,100%,.75);font-weight:500;padding-block:4px;padding-inline:24px}.preset-management .left-list-wrapper .list-item{background-color:transparent;cursor:pointer;transition-duration:.15s;transition-property:background-color;transition-timing-function:cubic-bezier(.4,0,.2,1)}.preset-management .left-list-wrapper .list-item.selected{background-color:hsla(0,0%,100%,.12)}.preset-management .submit-btn-wrapper{bottom:0;left:0;margin-block-start:0;padding:16px 24px;position:absolute;right:0;text-align:right}
package/dist/index.esm.js CHANGED
@@ -1,8 +1,8 @@
1
1
  import { useState, useCallback, useEffect, memo, useMemo, useRef, forwardRef, useContext, createContext } from 'react';
2
2
  import { useWebSocket, useInterval } from 'ahooks';
3
- import { Tooltip, Space, Flex, Divider, App, Modal, Form, Input, Alert, message, Dropdown, Spin, Popover, Button, Popconfirm, Typography, Empty, ConfigProvider, Tree, InputNumber, Badge, Switch, Select } from 'antd';
3
+ import { Tooltip, Space, Flex, Divider, App, Modal, Form, Input, Alert, message, Dropdown, Spin, Popover, Button, Popconfirm, Typography, Empty, ConfigProvider, Tree, InputNumber, Badge, Switch, Select, List, Checkbox, Row, Col } from 'antd';
4
4
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
5
- import { LoadingOutlined, ExclamationCircleFilled, FolderOpenOutlined, FolderOutlined } from '@ant-design/icons';
5
+ import { LoadingOutlined, ExclamationCircleFilled, FolderOpenOutlined, FolderOutlined, PlusOutlined } from '@ant-design/icons';
6
6
  import axios from 'axios';
7
7
 
8
8
  const useHardwareWebSocket = socketUrl => {
@@ -3175,5 +3175,475 @@ const NetworkSettingsModal = _ref2 => {
3175
3175
  };
3176
3176
  var NetworkSettingsModal$1 = /*#__PURE__*/memo(NetworkSettingsModal);
3177
3177
 
3178
- export { AuthorizationModal, NetworkSettingsModal$1 as NetworkSettingsModal, PtpModal$1 as PtpModal, SystemOperations, UpgradeManager, useAuth, useDirectoryTree, useHardwareUsage, useHardwareWebSocket, useSystemOperations, useUpgrade };
3178
+ const LeftList = /*#__PURE__*/memo(_ref => {
3179
+ let {
3180
+ dataSource,
3181
+ selectedPresetId,
3182
+ onSelectPreset,
3183
+ onAddNew,
3184
+ onRemove,
3185
+ hasPresets = dataSource.length > 0,
3186
+ showDescription = false,
3187
+ texts = {
3188
+ newButton: "New Preset",
3189
+ removeButton: "Remove"
3190
+ }
3191
+ } = _ref;
3192
+ // 动态计算列布局
3193
+ const gridColumns = showDescription ? "grid-cols-3" : "grid-cols-2";
3194
+ return /*#__PURE__*/jsxs("div", {
3195
+ className: "h-full left-list-wrapper",
3196
+ children: [/*#__PURE__*/jsx("div", {
3197
+ className: "list-container",
3198
+ children: /*#__PURE__*/jsx(List, {
3199
+ header: /*#__PURE__*/jsxs("div", {
3200
+ className: `grid ${gridColumns} w-full list-header`,
3201
+ children: [/*#__PURE__*/jsx("div", {
3202
+ children: "Name"
3203
+ }), /*#__PURE__*/jsx("div", {
3204
+ children: "Create Time"
3205
+ }), showDescription && /*#__PURE__*/jsx("div", {
3206
+ children: "Description"
3207
+ })]
3208
+ }),
3209
+ dataSource: dataSource,
3210
+ rowKey: "id",
3211
+ renderItem: item => /*#__PURE__*/jsx(List.Item, {
3212
+ className: `list-item ${selectedPresetId === item.id ? 'selected' : ''}`,
3213
+ style: {
3214
+ padding: "9px 24px"
3215
+ },
3216
+ onClick: () => onSelectPreset(item),
3217
+ children: /*#__PURE__*/jsxs("div", {
3218
+ className: `grid ${gridColumns} w-full text-text-normal`,
3219
+ children: [/*#__PURE__*/jsx("div", {
3220
+ title: item.name,
3221
+ children: item.name || "Untitled Preset"
3222
+ }), /*#__PURE__*/jsx("div", {
3223
+ children: item.create_time
3224
+ }), showDescription && /*#__PURE__*/jsx("div", {
3225
+ children: item.description
3226
+ })]
3227
+ })
3228
+ }),
3229
+ locale: {
3230
+ emptyText: /*#__PURE__*/jsx("div", {
3231
+ className: "p-8",
3232
+ children: /*#__PURE__*/jsx(Empty, {
3233
+ image: Empty.PRESENTED_IMAGE_SIMPLE,
3234
+ description: /*#__PURE__*/jsx("span", {
3235
+ className: "text-gray-400",
3236
+ children: /*#__PURE__*/jsx(Button, {
3237
+ type: "link",
3238
+ onClick: onAddNew,
3239
+ className: "p-0 h-auto",
3240
+ icon: /*#__PURE__*/jsx(PlusOutlined, {}),
3241
+ children: "Create new preset"
3242
+ })
3243
+ })
3244
+ })
3245
+ })
3246
+ }
3247
+ })
3248
+ }), hasPresets && /*#__PURE__*/jsx("div", {
3249
+ className: "p-4",
3250
+ style: {
3251
+ paddingInline: 24
3252
+ },
3253
+ children: /*#__PURE__*/jsxs(Space, {
3254
+ size: "middle",
3255
+ children: [/*#__PURE__*/jsx(Button, {
3256
+ type: "default",
3257
+ icon: /*#__PURE__*/jsx(PlusOutlined, {}),
3258
+ style: {
3259
+ padding: "20px 12px"
3260
+ },
3261
+ className: "btn-gray",
3262
+ onClick: onAddNew,
3263
+ children: texts.newButton
3264
+ }), /*#__PURE__*/jsx(Button, {
3265
+ type: "default",
3266
+ style: {
3267
+ padding: "20px 12px"
3268
+ },
3269
+ className: "btn-gray",
3270
+ onClick: onRemove,
3271
+ children: texts.removeButton
3272
+ })]
3273
+ })
3274
+ })]
3275
+ });
3276
+ });
3277
+ const SubmitButton = _ref2 => {
3278
+ let {
3279
+ loading,
3280
+ action,
3281
+ children,
3282
+ disabled = false
3283
+ } = _ref2;
3284
+ return /*#__PURE__*/jsx("div", {
3285
+ className: "submit-btn-wrapper",
3286
+ children: /*#__PURE__*/jsx(Button, {
3287
+ className: "btn-gray",
3288
+ loading: loading,
3289
+ onClick: action,
3290
+ disabled: disabled,
3291
+ children: children
3292
+ })
3293
+ });
3294
+ };
3295
+ const RightDetailForm = /*#__PURE__*/memo(_ref3 => {
3296
+ let {
3297
+ form,
3298
+ onSave,
3299
+ onLoad,
3300
+ isLoading,
3301
+ isEditing,
3302
+ fields = {
3303
+ name: {
3304
+ label: "Preset Name",
3305
+ placeholder: "Enter preset name",
3306
+ required: true
3307
+ }
3308
+ },
3309
+ texts = {
3310
+ loadButton: "Load",
3311
+ saveButton: "Save"
3312
+ },
3313
+ presetChanged
3314
+ } = _ref3;
3315
+ const [initialSelected, setInitialSelected] = useState([]);
3316
+ const currentSelected = Form.useWatch('category_list', form) || [];
3317
+
3318
+ // 检查是否包含category_list字段
3319
+ const hasCategoryList = fields.category_list !== null && fields.category_list !== undefined;
3320
+
3321
+ // 初始化 category_list 的选择状态
3322
+ useEffect(() => {
3323
+ if (hasCategoryList) {
3324
+ const currentValue = form.getFieldValue('category_list') || [];
3325
+ setInitialSelected(currentValue);
3326
+ }
3327
+ }, [presetChanged, form, hasCategoryList]); // 当presetChanged变化时更新
3328
+
3329
+ // 动态生成 checkbox 选项
3330
+ const checkboxOptions = useMemo(() => {
3331
+ if (!hasCategoryList) return [];
3332
+ return fields.category_list.options.map(category => {
3333
+ const isInitiallySelected = initialSelected.includes(category.name);
3334
+ const shouldDisable = isEditing ? !isInitiallySelected : false;
3335
+ return {
3336
+ ...category,
3337
+ disabled: shouldDisable
3338
+ };
3339
+ });
3340
+ }, [initialSelected, isEditing, hasCategoryList, fields.category_list]);
3341
+ return /*#__PURE__*/jsxs(Flex, {
3342
+ vertical: true,
3343
+ className: "h-full",
3344
+ children: [/*#__PURE__*/jsxs(Form, {
3345
+ form: form,
3346
+ layout: "vertical",
3347
+ autoComplete: "off",
3348
+ style: {
3349
+ flex: 1,
3350
+ overflowY: 'auto'
3351
+ },
3352
+ children: [/*#__PURE__*/jsx(Form.Item, {
3353
+ name: "name",
3354
+ label: fields.name.label,
3355
+ rules: [{
3356
+ required: fields.name.required,
3357
+ validator: async (_, value) => {
3358
+ if (!value || value.trim() === '') {
3359
+ return Promise.reject(new Error('Preset name cannot be empty or spaces only'));
3360
+ }
3361
+ }
3362
+ }],
3363
+ children: /*#__PURE__*/jsx(Input, {
3364
+ placeholder: fields.name.placeholder,
3365
+ disabled: isEditing
3366
+ })
3367
+ }), hasCategoryList && /*#__PURE__*/jsx(Form.Item, {
3368
+ name: "category_list",
3369
+ label: fields.category_list.label,
3370
+ rules: [{
3371
+ required: fields.category_list.required,
3372
+ message: 'Please select at least one category',
3373
+ validator: (_, value) => {
3374
+ if (value && value.length > 0) {
3375
+ return Promise.resolve();
3376
+ }
3377
+ return Promise.reject(new Error('Please select at least one category'));
3378
+ }
3379
+ }],
3380
+ children: /*#__PURE__*/jsx(Checkbox.Group, {
3381
+ className: "grid grid-cols-2 gap-2",
3382
+ children: checkboxOptions.map(category => /*#__PURE__*/jsx(Checkbox, {
3383
+ value: category.name,
3384
+ disabled: category.disabled,
3385
+ children: category.label
3386
+ }, category.name))
3387
+ })
3388
+ }), fields.description && /*#__PURE__*/jsx(Form.Item, {
3389
+ name: "description",
3390
+ label: fields.description.label,
3391
+ children: /*#__PURE__*/jsx(Input.TextArea, {
3392
+ rows: 4,
3393
+ placeholder: fields.description.placeholder,
3394
+ disabled: isEditing
3395
+ })
3396
+ })]
3397
+ }), isEditing ? /*#__PURE__*/jsx(SubmitButton, {
3398
+ action: onLoad,
3399
+ ...(hasCategoryList && {
3400
+ disabled: !currentSelected.length
3401
+ }),
3402
+ children: texts.loadButton
3403
+ }) : /*#__PURE__*/jsx(SubmitButton, {
3404
+ action: onSave,
3405
+ loading: isLoading,
3406
+ children: texts.saveButton
3407
+ })]
3408
+ });
3409
+ });
3410
+
3411
+ const Preset = _ref => {
3412
+ let {
3413
+ open,
3414
+ onClose,
3415
+ // API 方法通过 props 传入
3416
+ getPresetList,
3417
+ savePreset,
3418
+ removePreset,
3419
+ loadPreset,
3420
+ // 字段配置
3421
+ fields = {
3422
+ name: {
3423
+ label: "Preset Name",
3424
+ placeholder: "Enter preset name",
3425
+ required: true
3426
+ }
3427
+ },
3428
+ texts = {
3429
+ title: "Preset Management",
3430
+ emptyText: "Select a preset from the list to view details",
3431
+ deleteConfirm: "Are you sure to delete preset",
3432
+ loadText: "Loading...",
3433
+ successText: "Success",
3434
+ newButton: "New Preset",
3435
+ removeButton: "Remove",
3436
+ loadButton: "Load",
3437
+ saveButton: "Save"
3438
+ },
3439
+ // 样式定制
3440
+ width = 1000,
3441
+ height = 680,
3442
+ className = ""
3443
+ } = _ref;
3444
+ const {
3445
+ message: AntdMessage,
3446
+ modal: AntdModal
3447
+ } = App.useApp();
3448
+ const [presetList, setPresetList] = useState([]);
3449
+ const [selectedPreset, setSelectedPreset] = useState(null);
3450
+ const [loading, setLoading] = useState(false);
3451
+ const [presetChanged, setPresetChanged] = useState(0);
3452
+ const [form] = Form.useForm();
3453
+
3454
+ // 获取预设列表
3455
+ useEffect(() => {
3456
+ fetchPresetList();
3457
+ }, []);
3458
+ const fetchPresetList = useCallback(async () => {
3459
+ try {
3460
+ const data = await getPresetList();
3461
+ if (data?.preset_list) {
3462
+ setPresetList(data.preset_list);
3463
+ }
3464
+ } catch (error) {
3465
+ console.error('Failed to fetch preset list:', error);
3466
+ }
3467
+ }, [getPresetList]);
3468
+ const handleSelectPreset = useCallback(preset => {
3469
+ setSelectedPreset(preset);
3470
+ form.setFieldsValue(preset);
3471
+ // setPresetChanged(prev => prev + 1); // 触发更新
3472
+ }, [form]);
3473
+ const handleAddNew = useCallback(() => {
3474
+ const unsavedPreset = presetList.find(item => !item.id);
3475
+ if (unsavedPreset) {
3476
+ AntdMessage.warning('Existing unsaved preset detected.');
3477
+ return;
3478
+ }
3479
+
3480
+ // 创建新的数据,包含所有配置的字段
3481
+ const newPreset = Object.keys(fields).reduce((acc, fieldName) => {
3482
+ acc[fieldName] = '';
3483
+ return acc;
3484
+ }, {});
3485
+
3486
+ // 特殊处理 category_list
3487
+ if (fields.category_list?.options) {
3488
+ newPreset.category_list = fields.category_list.options.map(item => item.name);
3489
+ }
3490
+ setPresetList([...presetList, newPreset]);
3491
+ setSelectedPreset(newPreset);
3492
+ form.setFieldsValue(newPreset);
3493
+ }, [form, presetList, AntdMessage]);
3494
+ const handleRemove = useCallback(async () => {
3495
+ if (!selectedPreset) return;
3496
+
3497
+ // 检查是否为新建的未保存数据(无id)
3498
+ const isUnsavedPreset = !selectedPreset.id;
3499
+ const presetName = selectedPreset.name || 'Untitled Preset';
3500
+ try {
3501
+ AntdModal.confirm({
3502
+ icon: /*#__PURE__*/jsx(ExclamationCircleFilled, {}),
3503
+ title: `${texts.deleteConfirm} "${presetName}"?`,
3504
+ cancelText: 'No',
3505
+ okText: 'Yes',
3506
+ onOk: async () => {
3507
+ if (!isUnsavedPreset) {
3508
+ await removePreset({
3509
+ id: selectedPreset.id
3510
+ });
3511
+ AntdMessage.success(texts.successText);
3512
+ // 刷新列表
3513
+ await fetchPresetList();
3514
+ } else {
3515
+ setPresetList(prev => prev.filter(item => !!item.id));
3516
+ }
3517
+
3518
+ // 重置表单和选择状态
3519
+ setSelectedPreset(null);
3520
+ form.resetFields();
3521
+ }
3522
+ });
3523
+ } catch (error) {
3524
+ console.error('Failed to delete preset:', error);
3525
+ }
3526
+ }, [selectedPreset, form, AntdModal, AntdMessage, fetchPresetList, texts]);
3527
+ const handleLoadPreset = useCallback(async () => {
3528
+ if (!selectedPreset?.id) return;
3529
+
3530
+ // 显示加载模态框
3531
+ const modalInstance = Modal.info({
3532
+ title: texts.loadText,
3533
+ content: /*#__PURE__*/jsx(Spin, {
3534
+ size: "large",
3535
+ className: "block mx-auto"
3536
+ }),
3537
+ maskClosable: false,
3538
+ okButtonProps: {
3539
+ style: {
3540
+ display: 'none'
3541
+ }
3542
+ }
3543
+ });
3544
+ try {
3545
+ await loadPreset({
3546
+ id: selectedPreset.id,
3547
+ ...(selectedPreset.category_list && {
3548
+ category_list: selectedPreset.category_list
3549
+ })
3550
+ });
3551
+ // 成功时延迟关闭
3552
+ setTimeout(() => {
3553
+ modalInstance.destroy();
3554
+ AntdMessage.success(texts.successText);
3555
+ }, 1000);
3556
+ } catch (error) {
3557
+ console.error('Failed to load preset:', error);
3558
+ modalInstance.destroy();
3559
+ }
3560
+ }, [selectedPreset, loadPreset, texts, AntdMessage]);
3561
+ const handleSave = useCallback(async () => {
3562
+ setLoading(true);
3563
+ try {
3564
+ const values = await form.validateFields();
3565
+ console.log('Form values:', values);
3566
+ await savePreset(values);
3567
+ AntdMessage.success(texts.successText);
3568
+ // 刷新列表
3569
+ await fetchPresetList();
3570
+
3571
+ // 重置表单和选择状态
3572
+ setSelectedPreset(null);
3573
+ form.resetFields();
3574
+ } catch (error) {
3575
+ if (error.errorFields) {
3576
+ // 表单验证错误
3577
+ console.error('Form validation failed:', error.errorFields);
3578
+ } else {
3579
+ console.error('Failed to save preset:', error);
3580
+ }
3581
+ } finally {
3582
+ setLoading(false);
3583
+ }
3584
+ }, [form, AntdMessage, fetchPresetList, savePreset, texts]);
3585
+ return /*#__PURE__*/jsx(Modal, {
3586
+ title: texts.title,
3587
+ width: width,
3588
+ open: open,
3589
+ wrapClassName: `preset-management ${className}`,
3590
+ footer: null,
3591
+ onCancel: onClose,
3592
+ centered: true,
3593
+ styles: {
3594
+ body: {
3595
+ height: `${height}px`
3596
+ }
3597
+ },
3598
+ children: /*#__PURE__*/jsxs(Row, {
3599
+ gutter: 0,
3600
+ className: "h-full w-full",
3601
+ children: [/*#__PURE__*/jsx(Col, {
3602
+ span: 14,
3603
+ className: "h-full",
3604
+ children: /*#__PURE__*/jsx(LeftList, {
3605
+ dataSource: presetList,
3606
+ selectedPresetId: selectedPreset?.id,
3607
+ onSelectPreset: handleSelectPreset,
3608
+ onAddNew: handleAddNew,
3609
+ onRemove: handleRemove,
3610
+ showDescription: !!fields.description // 根据 fields 判断是否显示 description
3611
+ ,
3612
+ texts: {
3613
+ newButton: texts.newButton,
3614
+ removeButton: texts.removeButton
3615
+ }
3616
+ })
3617
+ }), /*#__PURE__*/jsx(Col, {
3618
+ span: 10,
3619
+ className: "h-full p-6",
3620
+ children: selectedPreset ? /*#__PURE__*/jsx(RightDetailForm, {
3621
+ form: form,
3622
+ onSave: handleSave,
3623
+ onLoad: handleLoadPreset,
3624
+ isLoading: loading,
3625
+ isEditing: !!selectedPreset?.id,
3626
+ fields: fields,
3627
+ texts: {
3628
+ loadButton: texts.loadButton,
3629
+ saveButton: texts.saveButton
3630
+ },
3631
+ presetChanged: presetChanged
3632
+ }) : /*#__PURE__*/jsx(Flex, {
3633
+ vertical: true,
3634
+ justify: "center",
3635
+ align: "center",
3636
+ className: "h-full text-gray-400",
3637
+ children: /*#__PURE__*/jsx(Empty, {
3638
+ image: Empty.PRESENTED_IMAGE_SIMPLE,
3639
+ description: texts.emptyText
3640
+ })
3641
+ })
3642
+ })]
3643
+ })
3644
+ });
3645
+ };
3646
+ var PresetModal = /*#__PURE__*/memo(Preset);
3647
+
3648
+ export { AuthorizationModal, NetworkSettingsModal$1 as NetworkSettingsModal, PresetModal, PtpModal$1 as PtpModal, SystemOperations, UpgradeManager, useAuth, useDirectoryTree, useHardwareUsage, useHardwareWebSocket, useSystemOperations, useUpgrade };
3179
3649
  //# sourceMappingURL=index.esm.js.map