@g1cloud/bluesea 5.0.0-beta.3 → 5.0.0-beta.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +21 -0
- package/bin/install-claude-skill.mjs +74 -0
- package/css/bluesea.css +231 -36
- package/dist/{BSAlertModal-xBi30_WT.js → BSAlertModal-DulqxsTV.js} +1 -1
- package/dist/{BSGridColumnSettingModal-CGOmNxYg.js → BSGridColumnSettingModal-BN6Vj68A.js} +1 -1
- package/dist/{BSRichTextMaximizedModal-bwfs_ETq.js → BSRichTextMaximizedModal-CIAHu7mO.js} +1 -1
- package/dist/{BSYesNoModal-g_jspSyV.js → BSYesNoModal-Dyn0eiZN.js} +1 -1
- package/dist/{BSYoutubeInputModal-gxqSatHw.js → BSYoutubeInputModal-DvZGT4dE.js} +7 -2
- package/dist/{ImageInsertModal-BjQMX1aF.js → ImageInsertModal-DxWDiQqF.js} +2 -2
- package/dist/{ImageProperties.vue_vue_type_script_setup_true_lang-DngZdEN7.js → ImageProperties.vue_vue_type_script_setup_true_lang-Dw56sBEs.js} +1 -1
- package/dist/{ImagePropertiesModal-BVMSRdqN.js → ImagePropertiesModal-C1w8G5aD.js} +2 -2
- package/dist/{LinkPropertiesModal-CjQMdxnd.js → LinkPropertiesModal-Iaj5Zq08.js} +1 -1
- package/dist/{TableInsertModal-W9oMIgb_.js → TableInsertModal-Bwv292s8.js} +1 -1
- package/dist/{TablePropertiesModal-rKhKzzYG.js → TablePropertiesModal-CAj9cBv4.js} +1 -1
- package/dist/{VideoInsertModal-DMtZM5vy.js → VideoInsertModal-BBOCUIsN.js} +2 -2
- package/dist/{VideoProperties.vue_vue_type_script_setup_true_lang-CbE-PZdm.js → VideoProperties.vue_vue_type_script_setup_true_lang-B5E8cj0N.js} +1 -1
- package/dist/{VideoPropertiesModal-CLkvzq3Y.js → VideoPropertiesModal-DynwQU29.js} +2 -2
- package/dist/{YoutubeInsertModal-4_qANoY5.js → YoutubeInsertModal-EZ3bANQG.js} +2 -2
- package/dist/{YoutubeProperties.vue_vue_type_script_setup_true_lang-B-LT9GYf.js → YoutubeProperties.vue_vue_type_script_setup_true_lang-C_dg08zX.js} +1 -1
- package/dist/{YoutubePropertiesModal-BKwZsK6d.js → YoutubePropertiesModal-BCID3YkI.js} +2 -2
- package/dist/bluesea.css +194 -33
- package/dist/bluesea.js +218 -209
- package/dist/bluesea.umd.cjs +2240 -1217
- package/dist/component/grid/BSGrid.vue.d.ts +3 -3
- package/dist/component/grid/BSGridLookup.vue.d.ts +3 -1
- package/dist/component/grid/DateFilterModel.d.ts +15 -0
- package/dist/component/grid/GridLib.d.ts +2 -1
- package/dist/component/grid/GridModel.d.ts +9 -1
- package/dist/component/input/BSCheckboxGroup.vue.d.ts +3 -0
- package/dist/component/input/BSColorInput.vue.d.ts +2 -0
- package/dist/component/input/BSDateInput.vue.d.ts +2 -0
- package/dist/component/input/BSDateRange.vue.d.ts +2 -0
- package/dist/component/input/BSDateRangePresets.vue.d.ts +2 -2
- package/dist/component/input/BSFileUpload.vue.d.ts +76 -0
- package/dist/component/input/BSImageUpload.vue.d.ts +6 -0
- package/dist/component/input/BSMediaPreview.vue.d.ts +2 -0
- package/dist/component/input/BSMediaPreviewOverlay.vue.d.ts +44 -0
- package/dist/component/input/BSMultiImageUpload.vue.d.ts +4 -0
- package/dist/component/input/BSMultiSelect.vue.d.ts +10 -1
- package/dist/component/input/BSNumberInput.vue.d.ts +7 -0
- package/dist/component/input/BSPercentInput.vue.d.ts +166 -0
- package/dist/component/input/BSPopupSelect.vue.d.ts +3 -3
- package/dist/component/input/BSPositionedImageUpload.vue.d.ts +2 -0
- package/dist/component/input/BSPriceInput.vue.d.ts +9 -0
- package/dist/component/input/BSRadioButton.vue.d.ts +3 -3
- package/dist/component/input/BSRadioButtonGroup.vue.d.ts +3 -0
- package/dist/component/input/BSSelect.vue.d.ts +13 -1
- package/dist/component/input/BSSelectPopup.vue.d.ts +4 -1
- package/dist/component/input/BSTextArea.vue.d.ts +2 -0
- package/dist/component/input/BSTextInput.vue.d.ts +2 -0
- package/dist/component/input/BSTreeMultiSelect.vue.d.ts +6 -0
- package/dist/component/input/BSTreeSelect.vue.d.ts +6 -0
- package/dist/component/input/BSYesNoGroup.vue.d.ts +4 -0
- package/dist/component/input/BSYesNoSelect.vue.d.ts +4 -0
- package/dist/component/input/DateRangePresetModel.d.ts +2 -0
- package/dist/component/input/ImageUploadModel.d.ts +2 -0
- package/dist/component/layout/BSCardLayout.vue.d.ts +6 -10
- package/dist/component/layout/BSListLayout.vue.d.ts +3 -0
- package/dist/component/layout/BSListLayoutItem.vue.d.ts +3 -0
- package/dist/component/layout/BSTabSheet.vue.d.ts +2 -0
- package/dist/component/multilang/BSMultiLangHtmlEditor.vue.d.ts +2 -0
- package/dist/component/multilang/BSMultiLangTextArea.vue.d.ts +2 -0
- package/dist/component/multilang/BSMultiLangTextInput.vue.d.ts +2 -0
- package/dist/component/tree/BSTree.vue.d.ts +6 -0
- package/dist/component/tree/BSTreeRow.vue.d.ts +6 -3
- package/dist/component/tree/TreeLib.d.ts +20 -0
- package/dist/component/tree/TreeModel.d.ts +33 -1
- package/dist/config/config.d.ts +14 -6
- package/dist/directive/vT.d.ts +6 -1
- package/dist/frame/default/DefaultFrameModel.d.ts +2 -0
- package/dist/{index-BQZ3zTp7.js → index-DUGkQHsb.js} +2354 -1336
- package/dist/index.d.ts +4 -1
- package/dist/model/CommonTypes.d.ts +1 -1
- package/dist/text/i18n.d.ts +2 -1
- package/dist/util/formatUtil.d.ts +4 -4
- package/dist/validator/FormValidator.d.ts +5 -0
- package/package.json +6 -1
- package/skills/bluesea-ui/SKILL.md +312 -0
- package/skills/bluesea-ui/references/components.md +189 -0
- package/skills/bluesea-ui/references/grid.md +159 -0
- package/skills/bluesea-ui/references/i18n.md +126 -0
- package/skills/bluesea-ui/references/validation.md +176 -0
- package/text/bluesea_text_en.json +248 -956
- package/text/bluesea_text_fr.json +248 -956
- package/text/bluesea_text_ja.json +248 -956
- package/text/bluesea_text_ko.json +248 -956
- package/text/bluesea_text_zh.json +248 -956
package/README.md
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# @g1cloud/bluesea
|
|
2
|
+
|
|
3
|
+
Vue 3 UI library for g1cloud BackOffice applications. See the root
|
|
4
|
+
[README](../../README.md) and the demo app at `packages/bluesea-demo/` for a
|
|
5
|
+
guided tour of the components.
|
|
6
|
+
|
|
7
|
+
## Claude Code skill (optional)
|
|
8
|
+
|
|
9
|
+
This package ships a `bluesea-ui` skill that teaches Claude Code how to use
|
|
10
|
+
its components, validation system, and i18n conventions. Install it into
|
|
11
|
+
your project with:
|
|
12
|
+
|
|
13
|
+
npx -p @g1cloud/bluesea bluesea-install-skill
|
|
14
|
+
|
|
15
|
+
This writes `.claude/skills/bluesea-ui/` in the current working directory.
|
|
16
|
+
Re-run after upgrading `@g1cloud/bluesea` to pick up skill updates.
|
|
17
|
+
|
|
18
|
+
Supported flags:
|
|
19
|
+
|
|
20
|
+
- `--path <dir>` — install into `<dir>/.claude/skills/` instead of `cwd`.
|
|
21
|
+
- `--help` — usage.
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { cp, readFile, rm, stat, writeFile, mkdir } from 'node:fs/promises'
|
|
3
|
+
import { dirname, resolve } from 'node:path'
|
|
4
|
+
import { fileURLToPath } from 'node:url'
|
|
5
|
+
|
|
6
|
+
const SKILL_NAME = 'bluesea-ui'
|
|
7
|
+
|
|
8
|
+
const here = dirname(fileURLToPath(import.meta.url))
|
|
9
|
+
const packageRoot = resolve(here, '..')
|
|
10
|
+
const skillSource = resolve(packageRoot, 'skills', SKILL_NAME)
|
|
11
|
+
const packageJsonPath = resolve(packageRoot, 'package.json')
|
|
12
|
+
|
|
13
|
+
function parseArgs(argv) {
|
|
14
|
+
const out = { path: null }
|
|
15
|
+
for (let i = 0; i < argv.length; i++) {
|
|
16
|
+
const a = argv[i]
|
|
17
|
+
if (a === '--path' || a === '-p') {
|
|
18
|
+
out.path = argv[++i]
|
|
19
|
+
} else if (a === '--help' || a === '-h') {
|
|
20
|
+
out.help = true
|
|
21
|
+
} else {
|
|
22
|
+
console.error(`Unknown argument: ${a}`)
|
|
23
|
+
process.exit(2)
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return out
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function printHelp() {
|
|
30
|
+
console.log(`Usage: bluesea-install-skill [--path <dir>]
|
|
31
|
+
|
|
32
|
+
Installs the @g1cloud/bluesea Claude Code skill into <dir>/.claude/skills/${SKILL_NAME}/.
|
|
33
|
+
Defaults to the current working directory. Re-running overwrites the existing copy.`)
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
async function exists(p) {
|
|
37
|
+
try { await stat(p); return true } catch { return false }
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
async function main() {
|
|
41
|
+
const args = parseArgs(process.argv.slice(2))
|
|
42
|
+
if (args.help) { printHelp(); return }
|
|
43
|
+
|
|
44
|
+
if (!(await exists(skillSource))) {
|
|
45
|
+
console.error(`Skill source not found at ${skillSource}. This package appears to be incomplete.`)
|
|
46
|
+
process.exit(1)
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const targetRoot = resolve(args.path ?? process.cwd())
|
|
50
|
+
if (!(await exists(resolve(targetRoot, 'package.json')))) {
|
|
51
|
+
console.warn(`Note: no package.json at ${targetRoot} — installing anyway.`)
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
const targetSkillDir = resolve(targetRoot, '.claude', 'skills', SKILL_NAME)
|
|
55
|
+
|
|
56
|
+
if (await exists(targetSkillDir)) {
|
|
57
|
+
await rm(targetSkillDir, { recursive: true, force: true })
|
|
58
|
+
}
|
|
59
|
+
await mkdir(dirname(targetSkillDir), { recursive: true })
|
|
60
|
+
await cp(skillSource, targetSkillDir, { recursive: true })
|
|
61
|
+
|
|
62
|
+
let version = 'unknown'
|
|
63
|
+
try {
|
|
64
|
+
version = JSON.parse(await readFile(packageJsonPath, 'utf8')).version ?? 'unknown'
|
|
65
|
+
} catch { /* fall through with 'unknown' */ }
|
|
66
|
+
await writeFile(resolve(targetSkillDir, '.installed-version'), `${version}\n`, 'utf8')
|
|
67
|
+
|
|
68
|
+
console.log(`Installed @g1cloud/bluesea skill v${version} → ${targetSkillDir.replace(targetRoot + '/', '')}/`)
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
main().catch((err) => {
|
|
72
|
+
console.error(err.message ?? err)
|
|
73
|
+
process.exit(1)
|
|
74
|
+
})
|
package/css/bluesea.css
CHANGED
|
@@ -18681,6 +18681,19 @@ html {
|
|
|
18681
18681
|
min-width: 100%;
|
|
18682
18682
|
}
|
|
18683
18683
|
|
|
18684
|
+
.bs-popup-button.icon-only > button {
|
|
18685
|
+
border: 0 !important;
|
|
18686
|
+
padding: 4px 0;
|
|
18687
|
+
}
|
|
18688
|
+
|
|
18689
|
+
.bs-popup-button.icon-only > button > .font-icon {
|
|
18690
|
+
font-size: 1.2rem;
|
|
18691
|
+
}
|
|
18692
|
+
|
|
18693
|
+
.bs-popup-button.icon-only > button > .font-icon.right {
|
|
18694
|
+
display: none;
|
|
18695
|
+
}
|
|
18696
|
+
|
|
18684
18697
|
.bs-box-component-wrap, .bs-select-wrap, .bs-input-wrap, .bs-text-input {
|
|
18685
18698
|
display: inline-flex;
|
|
18686
18699
|
flex-direction: column;
|
|
@@ -21505,11 +21518,11 @@ html {
|
|
|
21505
21518
|
}
|
|
21506
21519
|
|
|
21507
21520
|
.bs-color-input.error input[type=color] {
|
|
21508
|
-
border-color: var(--
|
|
21521
|
+
border-color: var(--danger);
|
|
21509
21522
|
}
|
|
21510
21523
|
|
|
21511
21524
|
.bs-color-input.error .bs-text-input .input-area {
|
|
21512
|
-
border-color: var(--
|
|
21525
|
+
border-color: var(--danger);
|
|
21513
21526
|
}
|
|
21514
21527
|
|
|
21515
21528
|
.bs-color-input.modified input[type=color] {
|
|
@@ -21520,6 +21533,12 @@ html {
|
|
|
21520
21533
|
border-color: var(--purple);
|
|
21521
21534
|
}
|
|
21522
21535
|
|
|
21536
|
+
.bs-color-input.disabled input[type=color] {
|
|
21537
|
+
border-color: var(--border) !important;
|
|
21538
|
+
background-color: var(--gray-100) !important;
|
|
21539
|
+
color: var(--gray-400) !important;
|
|
21540
|
+
}
|
|
21541
|
+
|
|
21523
21542
|
.bs-color-input .view-mode {
|
|
21524
21543
|
line-height: 1;
|
|
21525
21544
|
}
|
|
@@ -25378,24 +25397,33 @@ html {
|
|
|
25378
25397
|
position: relative;
|
|
25379
25398
|
align-items: center;
|
|
25380
25399
|
height: 28px;
|
|
25381
|
-
padding: 0
|
|
25400
|
+
padding: 0 3px;
|
|
25382
25401
|
border-radius: 4px;
|
|
25383
25402
|
cursor: pointer;
|
|
25403
|
+
border: 1px solid transparent;
|
|
25404
|
+
}
|
|
25405
|
+
|
|
25406
|
+
.bs-tree-row .row-caption.selected {
|
|
25407
|
+
background-color: var(--blue-bg);
|
|
25408
|
+
}
|
|
25409
|
+
|
|
25410
|
+
.bs-tree-row .row-caption.selected .caption {
|
|
25411
|
+
color: var(--blue);
|
|
25412
|
+
font-weight: bold;
|
|
25413
|
+
}
|
|
25414
|
+
|
|
25415
|
+
.bs-tree-row .row-caption.focused {
|
|
25416
|
+
border: 1px solid var(--blue);
|
|
25384
25417
|
}
|
|
25385
25418
|
|
|
25386
25419
|
.bs-tree-row .row-caption .caption {
|
|
25387
|
-
padding:
|
|
25420
|
+
padding: 3px;
|
|
25388
25421
|
cursor: pointer;
|
|
25389
25422
|
user-select: none;
|
|
25390
25423
|
flex-grow: 1;
|
|
25391
25424
|
white-space: nowrap;
|
|
25392
25425
|
}
|
|
25393
25426
|
|
|
25394
|
-
.bs-tree-row .row-caption .caption.selected {
|
|
25395
|
-
color: var(--blue);
|
|
25396
|
-
font-weight: bold;
|
|
25397
|
-
}
|
|
25398
|
-
|
|
25399
25427
|
.bs-tree-row .row-caption > .expand-icon {
|
|
25400
25428
|
transform: rotate(-90deg);
|
|
25401
25429
|
transition: transform 300ms ease;
|
|
@@ -25462,6 +25490,7 @@ html {
|
|
|
25462
25490
|
.bs-tree {
|
|
25463
25491
|
overflow: auto;
|
|
25464
25492
|
position: relative;
|
|
25493
|
+
outline: 0;
|
|
25465
25494
|
}
|
|
25466
25495
|
|
|
25467
25496
|
.bs-tree > .tree-wrap {
|
|
@@ -26526,7 +26555,7 @@ html {
|
|
|
26526
26555
|
min-width: 200px;
|
|
26527
26556
|
}
|
|
26528
26557
|
|
|
26529
|
-
.bs-popup-select[data-v-
|
|
26558
|
+
.bs-popup-select[data-v-d74fd89c] {
|
|
26530
26559
|
column-gap: 8px !important;
|
|
26531
26560
|
}
|
|
26532
26561
|
|
|
@@ -27084,7 +27113,7 @@ input[data-v-ef5774f0] {
|
|
|
27084
27113
|
color: var(--body-text);
|
|
27085
27114
|
}
|
|
27086
27115
|
|
|
27087
|
-
input[data-v-
|
|
27116
|
+
input[data-v-d556d8eb] {
|
|
27088
27117
|
width: 48px;
|
|
27089
27118
|
height: 26px;
|
|
27090
27119
|
padding: 2px 4px;
|
|
@@ -27093,11 +27122,11 @@ input[data-v-8648edf8] {
|
|
|
27093
27122
|
background-color: var(--body-bg);
|
|
27094
27123
|
}
|
|
27095
27124
|
|
|
27096
|
-
span.table-property[data-v-
|
|
27125
|
+
span.table-property[data-v-537f70be] {
|
|
27097
27126
|
position: relative;
|
|
27098
27127
|
}
|
|
27099
27128
|
|
|
27100
|
-
span.table-property[data-v-
|
|
27129
|
+
span.table-property[data-v-537f70be]:after {
|
|
27101
27130
|
content: "settings";
|
|
27102
27131
|
position: absolute;
|
|
27103
27132
|
font-size: 0.5em;
|
|
@@ -27733,6 +27762,60 @@ div[data-v-c1655c12] {
|
|
|
27733
27762
|
display: block;
|
|
27734
27763
|
}
|
|
27735
27764
|
|
|
27765
|
+
.bs-media-overlay {
|
|
27766
|
+
position: fixed;
|
|
27767
|
+
inset: 0;
|
|
27768
|
+
z-index: 250;
|
|
27769
|
+
background-color: rgba(0, 0, 0, 0.9);
|
|
27770
|
+
display: flex;
|
|
27771
|
+
align-items: center;
|
|
27772
|
+
justify-content: center;
|
|
27773
|
+
}
|
|
27774
|
+
|
|
27775
|
+
.bs-media-overlay .bs-media-overlay-media {
|
|
27776
|
+
max-width: 95vw;
|
|
27777
|
+
max-height: 95vh;
|
|
27778
|
+
object-fit: contain;
|
|
27779
|
+
}
|
|
27780
|
+
|
|
27781
|
+
.bs-media-overlay .bs-media-overlay-close {
|
|
27782
|
+
position: absolute;
|
|
27783
|
+
top: 12px;
|
|
27784
|
+
right: 12px;
|
|
27785
|
+
color: var(--white);
|
|
27786
|
+
font-size: 1.8em;
|
|
27787
|
+
background-color: rgba(0, 0, 0, 0.5);
|
|
27788
|
+
border-radius: 4px;
|
|
27789
|
+
padding: 4px;
|
|
27790
|
+
line-height: 1;
|
|
27791
|
+
}
|
|
27792
|
+
|
|
27793
|
+
.bs-media-overlay .bs-media-overlay-nav {
|
|
27794
|
+
position: absolute;
|
|
27795
|
+
top: 50%;
|
|
27796
|
+
transform: translateY(-50%);
|
|
27797
|
+
color: var(--white);
|
|
27798
|
+
font-size: 3em;
|
|
27799
|
+
background-color: rgba(0, 0, 0, 0.5);
|
|
27800
|
+
border-radius: 4px;
|
|
27801
|
+
padding: 8px 4px;
|
|
27802
|
+
line-height: 1;
|
|
27803
|
+
user-select: none;
|
|
27804
|
+
}
|
|
27805
|
+
|
|
27806
|
+
.bs-media-overlay .bs-media-overlay-prev {
|
|
27807
|
+
left: 12px;
|
|
27808
|
+
}
|
|
27809
|
+
|
|
27810
|
+
.bs-media-overlay .bs-media-overlay-next {
|
|
27811
|
+
right: 12px;
|
|
27812
|
+
}
|
|
27813
|
+
|
|
27814
|
+
.bs-media-overlay .bs-media-overlay-nav-disabled {
|
|
27815
|
+
opacity: 0.25;
|
|
27816
|
+
cursor: default;
|
|
27817
|
+
}
|
|
27818
|
+
|
|
27736
27819
|
.bs-image-upload {
|
|
27737
27820
|
display: inline-block;
|
|
27738
27821
|
}
|
|
@@ -27800,22 +27883,22 @@ div[data-v-c1655c12] {
|
|
|
27800
27883
|
border-color: var(--border) !important;
|
|
27801
27884
|
}
|
|
27802
27885
|
|
|
27803
|
-
.image-upload-move[data-v-
|
|
27804
|
-
.image-upload-enter-active[data-v-
|
|
27805
|
-
.image-upload-leave-active[data-v-
|
|
27886
|
+
.image-upload-move[data-v-e57e268c],
|
|
27887
|
+
.image-upload-enter-active[data-v-e57e268c],
|
|
27888
|
+
.image-upload-leave-active[data-v-e57e268c] {
|
|
27806
27889
|
transition: all 0.3s ease;
|
|
27807
27890
|
}
|
|
27808
27891
|
|
|
27809
|
-
.image-upload-leave-from[data-v-
|
|
27810
|
-
.image-upload-leave-to[data-v-
|
|
27892
|
+
.image-upload-leave-from[data-v-e57e268c],
|
|
27893
|
+
.image-upload-leave-to[data-v-e57e268c] {
|
|
27811
27894
|
display: none;
|
|
27812
27895
|
}
|
|
27813
27896
|
|
|
27814
|
-
.image-upload-enter-from[data-v-
|
|
27897
|
+
.image-upload-enter-from[data-v-e57e268c] {
|
|
27815
27898
|
opacity: 0;
|
|
27816
27899
|
}
|
|
27817
27900
|
|
|
27818
|
-
.image-upload-leave-active[data-v-
|
|
27901
|
+
.image-upload-leave-active[data-v-e57e268c] {
|
|
27819
27902
|
position: absolute;
|
|
27820
27903
|
}
|
|
27821
27904
|
|
|
@@ -27845,6 +27928,99 @@ div[data-v-c1655c12] {
|
|
|
27845
27928
|
color: #999;
|
|
27846
27929
|
}
|
|
27847
27930
|
|
|
27931
|
+
.bs-file-upload {
|
|
27932
|
+
display: inline-block;
|
|
27933
|
+
}
|
|
27934
|
+
|
|
27935
|
+
.bs-file-upload.modified .file-box {
|
|
27936
|
+
border-color: var(--purple) !important;
|
|
27937
|
+
}
|
|
27938
|
+
|
|
27939
|
+
.bs-file-upload.error .file-box {
|
|
27940
|
+
border-color: var(--red) !important;
|
|
27941
|
+
}
|
|
27942
|
+
|
|
27943
|
+
.bs-file-upload .file-box {
|
|
27944
|
+
border: 1px solid var(--border);
|
|
27945
|
+
border-radius: 4px;
|
|
27946
|
+
padding: 8px 12px;
|
|
27947
|
+
display: flex;
|
|
27948
|
+
align-items: center;
|
|
27949
|
+
gap: 8px;
|
|
27950
|
+
min-height: 40px;
|
|
27951
|
+
}
|
|
27952
|
+
|
|
27953
|
+
.bs-file-upload .file-box .file-icon {
|
|
27954
|
+
color: var(--gray-500);
|
|
27955
|
+
font-size: 1.2em;
|
|
27956
|
+
}
|
|
27957
|
+
|
|
27958
|
+
.bs-file-upload .file-box .file-name {
|
|
27959
|
+
flex: 1;
|
|
27960
|
+
overflow: hidden;
|
|
27961
|
+
text-overflow: ellipsis;
|
|
27962
|
+
white-space: nowrap;
|
|
27963
|
+
}
|
|
27964
|
+
|
|
27965
|
+
.bs-file-upload .file-box a.file-name {
|
|
27966
|
+
color: var(--primary);
|
|
27967
|
+
text-decoration: none;
|
|
27968
|
+
}
|
|
27969
|
+
|
|
27970
|
+
.bs-file-upload .file-box a.file-name:hover {
|
|
27971
|
+
text-decoration: underline;
|
|
27972
|
+
}
|
|
27973
|
+
|
|
27974
|
+
.bs-file-upload .file-box .remove-btn {
|
|
27975
|
+
border: none;
|
|
27976
|
+
background: none;
|
|
27977
|
+
padding: 4px;
|
|
27978
|
+
color: var(--gray-500);
|
|
27979
|
+
display: flex;
|
|
27980
|
+
align-items: center;
|
|
27981
|
+
justify-content: center;
|
|
27982
|
+
}
|
|
27983
|
+
|
|
27984
|
+
.bs-file-upload .file-box .remove-btn:hover {
|
|
27985
|
+
color: var(--red);
|
|
27986
|
+
}
|
|
27987
|
+
|
|
27988
|
+
.bs-file-upload .upload-btn-wrapper {
|
|
27989
|
+
width: 100%;
|
|
27990
|
+
display: flex;
|
|
27991
|
+
align-items: center;
|
|
27992
|
+
justify-content: center;
|
|
27993
|
+
}
|
|
27994
|
+
|
|
27995
|
+
.bs-file-upload .upload-btn-wrapper .upload-btn {
|
|
27996
|
+
display: flex;
|
|
27997
|
+
align-items: center;
|
|
27998
|
+
gap: 4px;
|
|
27999
|
+
color: var(--gray-500);
|
|
28000
|
+
padding: 4px 8px;
|
|
28001
|
+
border-radius: 4px;
|
|
28002
|
+
}
|
|
28003
|
+
|
|
28004
|
+
.bs-file-upload .upload-btn-wrapper .upload-btn:hover:not(.disabled) {
|
|
28005
|
+
background-color: var(--gray-100);
|
|
28006
|
+
color: var(--color-text);
|
|
28007
|
+
}
|
|
28008
|
+
|
|
28009
|
+
.bs-file-upload .upload-btn-wrapper .no-file {
|
|
28010
|
+
color: var(--gray-400);
|
|
28011
|
+
}
|
|
28012
|
+
|
|
28013
|
+
.bs-file-upload .upload-btn-wrapper.dropping {
|
|
28014
|
+
background-color: var(--primary-200);
|
|
28015
|
+
border: 2px dashed var(--primary);
|
|
28016
|
+
border-radius: 4px;
|
|
28017
|
+
}
|
|
28018
|
+
|
|
28019
|
+
.bs-file-upload .disabled .file-box {
|
|
28020
|
+
opacity: 0.5;
|
|
28021
|
+
border-color: var(--border) !important;
|
|
28022
|
+
}
|
|
28023
|
+
|
|
27848
28024
|
.resize-handle[data-v-f4cd842f] {
|
|
27849
28025
|
position: absolute;
|
|
27850
28026
|
width: 5px;
|
|
@@ -29823,6 +29999,11 @@ div[data-v-c1655c12] {
|
|
|
29823
29999
|
width: 100%;
|
|
29824
30000
|
overflow-x: auto;
|
|
29825
30001
|
overflow-y: hidden;
|
|
30002
|
+
scrollbar-width: none;
|
|
30003
|
+
}
|
|
30004
|
+
|
|
30005
|
+
.bs-tab-sheet .tab-bar::-webkit-scrollbar {
|
|
30006
|
+
display: none;
|
|
29826
30007
|
}
|
|
29827
30008
|
|
|
29828
30009
|
.bs-tab-sheet .tab-bar .tabs {
|
|
@@ -29839,7 +30020,7 @@ div[data-v-c1655c12] {
|
|
|
29839
30020
|
margin-bottom: -1px;
|
|
29840
30021
|
white-space: nowrap;
|
|
29841
30022
|
cursor: pointer;
|
|
29842
|
-
overflow-x:
|
|
30023
|
+
overflow-x: hidden;
|
|
29843
30024
|
}
|
|
29844
30025
|
|
|
29845
30026
|
.bs-tab-sheet .tab-bar .tabs .tab + .tab:before {
|
|
@@ -29940,16 +30121,9 @@ div[data-v-c1655c12] {
|
|
|
29940
30121
|
|
|
29941
30122
|
.bs-list-layout-item {
|
|
29942
30123
|
position: relative;
|
|
29943
|
-
border: 1px solid var(--gray-200);
|
|
29944
|
-
margin-top: -1px;
|
|
29945
|
-
}
|
|
29946
|
-
|
|
29947
|
-
.bs-list-layout-item:nth-child(odd) .list-item-title {
|
|
29948
30124
|
background-color: var(--body-bg);
|
|
29949
|
-
|
|
29950
|
-
|
|
29951
|
-
.bs-list-layout-item:nth-child(even) .list-item-title {
|
|
29952
|
-
background-color: var(--gray-100);
|
|
30125
|
+
border: 1px solid var(--gray-300);
|
|
30126
|
+
margin-top: -1px;
|
|
29953
30127
|
}
|
|
29954
30128
|
|
|
29955
30129
|
.bs-list-layout-item.selected {
|
|
@@ -29966,11 +30140,32 @@ div[data-v-c1655c12] {
|
|
|
29966
30140
|
}
|
|
29967
30141
|
|
|
29968
30142
|
.bs-list-layout-item > .list-item-title {
|
|
29969
|
-
padding:
|
|
30143
|
+
padding: 8px;
|
|
30144
|
+
background-color: var(--gray-200);
|
|
29970
30145
|
}
|
|
29971
30146
|
|
|
29972
|
-
.bs-list-layout-item
|
|
29973
|
-
|
|
30147
|
+
.bs-list-layout-item:first-child {
|
|
30148
|
+
border-top-left-radius: 8px;
|
|
30149
|
+
border-top-right-radius: 8px;
|
|
30150
|
+
}
|
|
30151
|
+
|
|
30152
|
+
.bs-list-layout-item:first-child > .list-item-title {
|
|
30153
|
+
border-top-left-radius: 7px;
|
|
30154
|
+
border-top-right-radius: 7px;
|
|
30155
|
+
}
|
|
30156
|
+
|
|
30157
|
+
.bs-list-layout-item:last-child {
|
|
30158
|
+
border-bottom-left-radius: 8px;
|
|
30159
|
+
border-bottom-right-radius: 8px;
|
|
30160
|
+
}
|
|
30161
|
+
|
|
30162
|
+
.bs-list-layout-item:last-child:not(.expanded) > .list-item-title {
|
|
30163
|
+
border-bottom-left-radius: 7px;
|
|
30164
|
+
border-bottom-right-radius: 7px;
|
|
30165
|
+
}
|
|
30166
|
+
|
|
30167
|
+
.bs-list-layout-item.expanded > .list-item-title {
|
|
30168
|
+
border-bottom: 1px solid var(--gray-300);
|
|
29974
30169
|
}
|
|
29975
30170
|
|
|
29976
30171
|
.bs-list-layout-item .bs-checkbox.checked input::before {
|
|
@@ -29978,15 +30173,15 @@ div[data-v-c1655c12] {
|
|
|
29978
30173
|
}
|
|
29979
30174
|
|
|
29980
30175
|
.bs-list-layout-item > .list-item-content {
|
|
29981
|
-
padding: 8px
|
|
30176
|
+
padding: 8px;
|
|
29982
30177
|
}
|
|
29983
30178
|
|
|
29984
|
-
.bs-button[data-v-
|
|
30179
|
+
.bs-button[data-v-6e4e4dbf] {
|
|
29985
30180
|
padding: 3px;
|
|
29986
30181
|
height: auto;
|
|
29987
30182
|
}
|
|
29988
30183
|
|
|
29989
|
-
.bs-button[data-v-
|
|
30184
|
+
.bs-button[data-v-6e4e4dbf] .font-icon {
|
|
29990
30185
|
font-size: 12px;
|
|
29991
30186
|
}
|
|
29992
30187
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { defineComponent, createBlock, openBlock, withCtx, withDirectives, createElementVNode, unref, createVNode } from "vue";
|
|
2
|
-
import { u as useModalHandle, _ as _sfc_main$1, v as vT, B as BSButton,
|
|
2
|
+
import { u as useModalHandle, _ as _sfc_main$1, v as vT, B as BSButton, l as vFocusOnLoad } from "./index-DUGkQHsb.js";
|
|
3
3
|
const _hoisted_1 = { class: "text-right" };
|
|
4
4
|
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
5
5
|
__name: "BSAlertModal",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { defineComponent, ref, onMounted, createBlock, openBlock, withCtx, createElementVNode, createVNode, mergeProps, unref, toHandlers, nextTick } from "vue";
|
|
2
|
-
import {
|
|
2
|
+
import { g as createInputGridHandler, u as useModalHandle, _ as _sfc_main$1, B as BSButton, h as _sfc_main$2, j as _sfc_main$3, k as _sfc_main$4, n as notNull } from "./index-DUGkQHsb.js";
|
|
3
3
|
const _hoisted_1 = { class: "text-center" };
|
|
4
4
|
const _hoisted_2 = { class: "text-center" };
|
|
5
5
|
const _hoisted_3 = { class: "bs-layout-horizontal" };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { defineComponent, mergeModels, useModel, useTemplateRef, createBlock, openBlock } from "vue";
|
|
2
|
-
import { u as useModalHandle, d as _sfc_main$1 } from "./index-
|
|
2
|
+
import { u as useModalHandle, d as _sfc_main$1 } from "./index-DUGkQHsb.js";
|
|
3
3
|
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
4
4
|
__name: "BSRichTextMaximizedModal",
|
|
5
5
|
props: /* @__PURE__ */ mergeModels({
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { defineComponent, createBlock, openBlock, withCtx, withDirectives, createElementVNode, unref, createVNode } from "vue";
|
|
2
|
-
import { u as useModalHandle, _ as _sfc_main$1, v as vT, B as BSButton } from "./index-
|
|
2
|
+
import { u as useModalHandle, _ as _sfc_main$1, v as vT, B as BSButton } from "./index-DUGkQHsb.js";
|
|
3
3
|
const _hoisted_1 = { class: "text-right" };
|
|
4
4
|
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
5
5
|
__name: "BSYesNoModal",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { defineComponent, useModel, ref, createBlock, openBlock, withCtx, createElementVNode, createVNode, createCommentVNode, unref } from "vue";
|
|
2
|
-
import { u as useModalHandle, _ as _sfc_main$1, B as BSButton, b as _sfc_main$2, c as _sfc_main$3, e as extractYoutubeVideoId } from "./index-
|
|
2
|
+
import { u as useModalHandle, _ as _sfc_main$1, B as BSButton, b as _sfc_main$2, c as _sfc_main$3, e as extractYoutubeVideoId, i as isYoutubeNocookieUrl, f as buildYoutubeUrl } from "./index-DUGkQHsb.js";
|
|
3
3
|
import YouTube from "vue3-youtube";
|
|
4
4
|
const _hoisted_1 = { class: "bs-layout-vertical gap-16" };
|
|
5
5
|
const _hoisted_2 = { class: "bs-layout-horizontal align-items-center" };
|
|
@@ -18,7 +18,12 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
18
18
|
const modalHandle = useModalHandle();
|
|
19
19
|
const select = () => {
|
|
20
20
|
const videoId = extractYoutubeVideoId(url.value);
|
|
21
|
-
|
|
21
|
+
if (videoId) {
|
|
22
|
+
const nocookie = isYoutubeNocookieUrl(url.value);
|
|
23
|
+
modelValue.value = buildYoutubeUrl(videoId, nocookie);
|
|
24
|
+
} else {
|
|
25
|
+
modelValue.value = void 0;
|
|
26
|
+
}
|
|
22
27
|
modalHandle.close();
|
|
23
28
|
};
|
|
24
29
|
const close = () => {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { defineComponent, computed, ref, createBlock, openBlock, withCtx, createElementVNode, createVNode, withDirectives, vShow } from "vue";
|
|
2
|
-
import { u as useModalHandle, _ as _sfc_main$1, B as BSButton, a as _sfc_main$2, b as _sfc_main$3, c as _sfc_main$4 } from "./index-
|
|
3
|
-
import { _ as _sfc_main$5 } from "./ImageProperties.vue_vue_type_script_setup_true_lang-
|
|
2
|
+
import { u as useModalHandle, _ as _sfc_main$1, B as BSButton, a as _sfc_main$2, b as _sfc_main$3, c as _sfc_main$4 } from "./index-DUGkQHsb.js";
|
|
3
|
+
import { _ as _sfc_main$5 } from "./ImageProperties.vue_vue_type_script_setup_true_lang-Dw56sBEs.js";
|
|
4
4
|
const _hoisted_1 = { class: "bs-layout-form title-w-8" };
|
|
5
5
|
const _hoisted_2 = { class: "title" };
|
|
6
6
|
const _hoisted_3 = { class: "bs-layout-horizontal justify-content-end gap-8" };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { defineComponent, createElementBlock, openBlock, Fragment, createElementVNode, createVNode, withDirectives, createTextVNode, unref } from "vue";
|
|
2
|
-
import { b as _sfc_main$1, c as _sfc_main$2, v as vT } from "./index-
|
|
2
|
+
import { b as _sfc_main$1, c as _sfc_main$2, v as vT } from "./index-DUGkQHsb.js";
|
|
3
3
|
const _hoisted_1 = { class: "title" };
|
|
4
4
|
const _hoisted_2 = { class: "title" };
|
|
5
5
|
const _hoisted_3 = { class: "title" };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { defineComponent, computed, ref, onMounted, useTemplateRef, createBlock, openBlock, withCtx, createElementVNode, createVNode, createElementBlock, createCommentVNode } from "vue";
|
|
2
|
-
import {
|
|
3
|
-
import { _ as _sfc_main$4 } from "./ImageProperties.vue_vue_type_script_setup_true_lang-
|
|
2
|
+
import { q as findImageNode, u as useModalHandle, _ as _sfc_main$1, B as BSButton, b as _sfc_main$2, c as _sfc_main$3, p as formValidator, r as imageInfoNumberToPixel } from "./index-DUGkQHsb.js";
|
|
3
|
+
import { _ as _sfc_main$4 } from "./ImageProperties.vue_vue_type_script_setup_true_lang-Dw56sBEs.js";
|
|
4
4
|
const _hoisted_1 = { class: "title" };
|
|
5
5
|
const _hoisted_2 = { class: "bs-layout-horizontal justify-content-end gap-8" };
|
|
6
6
|
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { defineComponent, ref, onMounted, createBlock, openBlock, withCtx, createElementVNode, createVNode, createTextVNode, withModifiers } from "vue";
|
|
2
|
-
import { u as useModalHandle, _ as _sfc_main$1, B as BSButton, b as _sfc_main$2, c as _sfc_main$3 } from "./index-
|
|
2
|
+
import { u as useModalHandle, _ as _sfc_main$1, B as BSButton, b as _sfc_main$2, c as _sfc_main$3 } from "./index-DUGkQHsb.js";
|
|
3
3
|
const _hoisted_1 = { class: "bs-layout-form title-w-8" };
|
|
4
4
|
const _hoisted_2 = { class: "title" };
|
|
5
5
|
const _hoisted_3 = { class: "title" };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { defineComponent, ref, createBlock, openBlock, withCtx, createElementVNode, createVNode } from "vue";
|
|
2
|
-
import { u as useModalHandle, _ as _sfc_main$1, B as BSButton, b as _sfc_main$2,
|
|
2
|
+
import { u as useModalHandle, _ as _sfc_main$1, B as BSButton, b as _sfc_main$2, j as _sfc_main$3 } from "./index-DUGkQHsb.js";
|
|
3
3
|
const _hoisted_1 = { class: "bs-layout-form" };
|
|
4
4
|
const _hoisted_2 = { class: "bs-form-label" };
|
|
5
5
|
const _hoisted_3 = { class: "bs-form-label" };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { defineComponent, computed, ref, onMounted, useTemplateRef, createBlock, openBlock, withCtx, createElementVNode, createVNode, createElementBlock, createCommentVNode, withDirectives, createTextVNode, unref, Fragment, renderList, toDisplayString } from "vue";
|
|
2
|
-
import {
|
|
2
|
+
import { m as componentUtil, u as useModalHandle, _ as _sfc_main$1, B as BSButton, b as _sfc_main$2, c as _sfc_main$3, v as vT, o as _sfc_main$4, p as formValidator } from "./index-DUGkQHsb.js";
|
|
3
3
|
const findTableNode = (selection, type) => {
|
|
4
4
|
const head = selection.$head;
|
|
5
5
|
let depth = head.depth;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { defineComponent, computed, ref, createBlock, openBlock, withCtx, createElementVNode, createVNode, withDirectives, vShow } from "vue";
|
|
2
|
-
import { u as useModalHandle, _ as _sfc_main$1, B as BSButton, a as _sfc_main$2, b as _sfc_main$3, c as _sfc_main$4 } from "./index-
|
|
3
|
-
import { _ as _sfc_main$5 } from "./VideoProperties.vue_vue_type_script_setup_true_lang-
|
|
2
|
+
import { u as useModalHandle, _ as _sfc_main$1, B as BSButton, a as _sfc_main$2, b as _sfc_main$3, c as _sfc_main$4 } from "./index-DUGkQHsb.js";
|
|
3
|
+
import { _ as _sfc_main$5 } from "./VideoProperties.vue_vue_type_script_setup_true_lang-B5E8cj0N.js";
|
|
4
4
|
const _hoisted_1 = { class: "bs-layout-form title-w-8" };
|
|
5
5
|
const _hoisted_2 = { class: "title" };
|
|
6
6
|
const _hoisted_3 = { class: "bs-layout-horizontal justify-content-end gap-8" };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { defineComponent, createElementBlock, openBlock, Fragment, createElementVNode, createVNode, withDirectives, createTextVNode, unref } from "vue";
|
|
2
|
-
import {
|
|
2
|
+
import { k as _sfc_main$1, b as _sfc_main$2, c as _sfc_main$3, v as vT } from "./index-DUGkQHsb.js";
|
|
3
3
|
const _hoisted_1 = { class: "bs-layout-horizontal gap-8" };
|
|
4
4
|
const _hoisted_2 = { class: "title" };
|
|
5
5
|
const _hoisted_3 = { class: "title" };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { defineComponent, computed, ref, onMounted, useTemplateRef, createBlock, openBlock, withCtx, createElementVNode, createVNode, createElementBlock, createCommentVNode } from "vue";
|
|
2
|
-
import {
|
|
3
|
-
import { _ as _sfc_main$4 } from "./VideoProperties.vue_vue_type_script_setup_true_lang-
|
|
2
|
+
import { w as findVideoNode, u as useModalHandle, _ as _sfc_main$1, B as BSButton, b as _sfc_main$2, c as _sfc_main$3, p as formValidator, x as videoInfoNumberToPixel } from "./index-DUGkQHsb.js";
|
|
3
|
+
import { _ as _sfc_main$4 } from "./VideoProperties.vue_vue_type_script_setup_true_lang-B5E8cj0N.js";
|
|
4
4
|
const _hoisted_1 = { class: "title" };
|
|
5
5
|
const _hoisted_2 = { class: "bs-layout-horizontal justify-content-end gap-8" };
|
|
6
6
|
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { defineComponent, computed, ref, createBlock, openBlock, withCtx, createElementVNode, createVNode } from "vue";
|
|
2
|
-
import { u as useModalHandle, _ as _sfc_main$1, B as BSButton, b as _sfc_main$2, c as _sfc_main$3, y as youtubeInfoNumberToPixel } from "./index-
|
|
3
|
-
import { _ as _sfc_main$4 } from "./YoutubeProperties.vue_vue_type_script_setup_true_lang-
|
|
2
|
+
import { u as useModalHandle, _ as _sfc_main$1, B as BSButton, b as _sfc_main$2, c as _sfc_main$3, y as youtubeInfoNumberToPixel } from "./index-DUGkQHsb.js";
|
|
3
|
+
import { _ as _sfc_main$4 } from "./YoutubeProperties.vue_vue_type_script_setup_true_lang-C_dg08zX.js";
|
|
4
4
|
const _hoisted_1 = { class: "bs-layout-form" };
|
|
5
5
|
const _hoisted_2 = { class: "title" };
|
|
6
6
|
const _hoisted_3 = { class: "bs-layout-horizontal justify-content-end gap-8" };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { defineComponent, createElementBlock, openBlock, Fragment, createElementVNode, createVNode, withDirectives, createTextVNode, unref } from "vue";
|
|
2
|
-
import { b as _sfc_main$1, c as _sfc_main$2, v as vT } from "./index-
|
|
2
|
+
import { b as _sfc_main$1, c as _sfc_main$2, v as vT } from "./index-DUGkQHsb.js";
|
|
3
3
|
const _hoisted_1 = { class: "title" };
|
|
4
4
|
const _hoisted_2 = { class: "title" };
|
|
5
5
|
const _hoisted_3 = { class: "title" };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { defineComponent, computed, ref, onMounted, createBlock, openBlock, withCtx, createElementVNode, createVNode, createElementBlock, createCommentVNode } from "vue";
|
|
2
|
-
import {
|
|
3
|
-
import { _ as _sfc_main$4 } from "./YoutubeProperties.vue_vue_type_script_setup_true_lang-
|
|
2
|
+
import { s as findYoutubeNode, t as normalizeYoutubeInfoData, u as useModalHandle, _ as _sfc_main$1, B as BSButton, b as _sfc_main$2, c as _sfc_main$3, y as youtubeInfoNumberToPixel } from "./index-DUGkQHsb.js";
|
|
3
|
+
import { _ as _sfc_main$4 } from "./YoutubeProperties.vue_vue_type_script_setup_true_lang-C_dg08zX.js";
|
|
4
4
|
const _hoisted_1 = {
|
|
5
5
|
key: 0,
|
|
6
6
|
class: "bs-layout-form"
|