@g1cloud/bluesea 5.0.0-beta.26 → 5.0.0-beta.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/README.md +21 -0
  2. package/bin/install-claude-skill.mjs +74 -0
  3. package/css/bluesea.css +61 -7
  4. package/dist/{BSAlertModal-CCdaoT-g.js → BSAlertModal-BpbJuAe1.js} +1 -1
  5. package/dist/{BSGridColumnSettingModal-CMJqpWzY.js → BSGridColumnSettingModal-8MqhRWkU.js} +1 -1
  6. package/dist/{BSRichTextMaximizedModal-Byrr_L8I.js → BSRichTextMaximizedModal-C86Skc5v.js} +1 -1
  7. package/dist/{BSYesNoModal-BljzNd5_.js → BSYesNoModal-CHbktVAj.js} +1 -1
  8. package/dist/{BSYoutubeInputModal-BZR0jJvt.js → BSYoutubeInputModal-JKnr4hGE.js} +1 -1
  9. package/dist/{ImageInsertModal-wdRGMEHH.js → ImageInsertModal-DQwkQJ8b.js} +2 -2
  10. package/dist/{ImageProperties.vue_vue_type_script_setup_true_lang-DNqql2HK.js → ImageProperties.vue_vue_type_script_setup_true_lang-BsMcsXdh.js} +1 -1
  11. package/dist/{ImagePropertiesModal-BumfiYFu.js → ImagePropertiesModal-X7blKqTy.js} +2 -2
  12. package/dist/{LinkPropertiesModal-C-cq00aG.js → LinkPropertiesModal-DGiiTivW.js} +1 -1
  13. package/dist/{TableInsertModal-DWy7cSQz.js → TableInsertModal-CupFfnOG.js} +1 -1
  14. package/dist/{TablePropertiesModal-BDir2XM5.js → TablePropertiesModal-CfK9i7Q5.js} +1 -1
  15. package/dist/{VideoInsertModal-s4eT3Ofx.js → VideoInsertModal-BwRRgibx.js} +2 -2
  16. package/dist/{VideoProperties.vue_vue_type_script_setup_true_lang-B2SQASHh.js → VideoProperties.vue_vue_type_script_setup_true_lang-zEMpmzTZ.js} +1 -1
  17. package/dist/{VideoPropertiesModal-zHc0vcQs.js → VideoPropertiesModal-Dn6AzhPy.js} +2 -2
  18. package/dist/{YoutubeInsertModal-CdcIzmFl.js → YoutubeInsertModal-DCn5bhN5.js} +2 -2
  19. package/dist/{YoutubeProperties.vue_vue_type_script_setup_true_lang-CWqGTFe5.js → YoutubeProperties.vue_vue_type_script_setup_true_lang-B-YVlp4Y.js} +1 -1
  20. package/dist/{YoutubePropertiesModal-CAd6dZ6E.js → YoutubePropertiesModal-Dg-n8cTv.js} +2 -2
  21. package/dist/bluesea.css +53 -7
  22. package/dist/bluesea.js +1 -1
  23. package/dist/bluesea.umd.cjs +623 -454
  24. package/dist/component/input/BSImageUpload.vue.d.ts +4 -0
  25. package/dist/component/input/BSMediaPreview.vue.d.ts +2 -0
  26. package/dist/component/input/BSMediaPreviewOverlay.vue.d.ts +44 -0
  27. package/dist/component/input/BSMultiImageUpload.vue.d.ts +2 -0
  28. package/dist/component/input/BSPositionedImageUpload.vue.d.ts +2 -0
  29. package/dist/{index-pO-xtezx.js → index-e3O4IL4V.js} +557 -388
  30. package/dist/text/i18n.d.ts +2 -1
  31. package/package.json +6 -1
  32. package/skills/bluesea-ui/SKILL.md +312 -0
  33. package/skills/bluesea-ui/references/components.md +189 -0
  34. package/skills/bluesea-ui/references/grid.md +159 -0
  35. package/skills/bluesea-ui/references/i18n.md +126 -0
  36. package/skills/bluesea-ui/references/validation.md +176 -0
  37. package/text/bluesea_text_en.json +248 -964
  38. package/text/bluesea_text_fr.json +248 -964
  39. package/text/bluesea_text_ja.json +248 -964
  40. package/text/bluesea_text_ko.json +248 -964
  41. package/text/bluesea_text_zh.json +248 -964
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
@@ -27762,6 +27762,60 @@ div[data-v-c1655c12] {
27762
27762
  display: block;
27763
27763
  }
27764
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
+
27765
27819
  .bs-image-upload {
27766
27820
  display: inline-block;
27767
27821
  }
@@ -27829,22 +27883,22 @@ div[data-v-c1655c12] {
27829
27883
  border-color: var(--border) !important;
27830
27884
  }
27831
27885
 
27832
- .image-upload-move[data-v-b7698f30],
27833
- .image-upload-enter-active[data-v-b7698f30],
27834
- .image-upload-leave-active[data-v-b7698f30] {
27886
+ .image-upload-move[data-v-e57e268c],
27887
+ .image-upload-enter-active[data-v-e57e268c],
27888
+ .image-upload-leave-active[data-v-e57e268c] {
27835
27889
  transition: all 0.3s ease;
27836
27890
  }
27837
27891
 
27838
- .image-upload-leave-from[data-v-b7698f30],
27839
- .image-upload-leave-to[data-v-b7698f30] {
27892
+ .image-upload-leave-from[data-v-e57e268c],
27893
+ .image-upload-leave-to[data-v-e57e268c] {
27840
27894
  display: none;
27841
27895
  }
27842
27896
 
27843
- .image-upload-enter-from[data-v-b7698f30] {
27897
+ .image-upload-enter-from[data-v-e57e268c] {
27844
27898
  opacity: 0;
27845
27899
  }
27846
27900
 
27847
- .image-upload-leave-active[data-v-b7698f30] {
27901
+ .image-upload-leave-active[data-v-e57e268c] {
27848
27902
  position: absolute;
27849
27903
  }
27850
27904
 
@@ -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, l as vFocusOnLoad } from "./index-pO-xtezx.js";
2
+ import { u as useModalHandle, _ as _sfc_main$1, v as vT, B as BSButton, l as vFocusOnLoad } from "./index-e3O4IL4V.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 { 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-pO-xtezx.js";
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-e3O4IL4V.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-pO-xtezx.js";
2
+ import { u as useModalHandle, d as _sfc_main$1 } from "./index-e3O4IL4V.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-pO-xtezx.js";
2
+ import { u as useModalHandle, _ as _sfc_main$1, v as vT, B as BSButton } from "./index-e3O4IL4V.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, i as isYoutubeNocookieUrl, f as buildYoutubeUrl } from "./index-pO-xtezx.js";
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-e3O4IL4V.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" };
@@ -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-pO-xtezx.js";
3
- import { _ as _sfc_main$5 } from "./ImageProperties.vue_vue_type_script_setup_true_lang-DNqql2HK.js";
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-e3O4IL4V.js";
3
+ import { _ as _sfc_main$5 } from "./ImageProperties.vue_vue_type_script_setup_true_lang-BsMcsXdh.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-pO-xtezx.js";
2
+ import { b as _sfc_main$1, c as _sfc_main$2, v as vT } from "./index-e3O4IL4V.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 { 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-pO-xtezx.js";
3
- import { _ as _sfc_main$4 } from "./ImageProperties.vue_vue_type_script_setup_true_lang-DNqql2HK.js";
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-e3O4IL4V.js";
3
+ import { _ as _sfc_main$4 } from "./ImageProperties.vue_vue_type_script_setup_true_lang-BsMcsXdh.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-pO-xtezx.js";
2
+ import { u as useModalHandle, _ as _sfc_main$1, B as BSButton, b as _sfc_main$2, c as _sfc_main$3 } from "./index-e3O4IL4V.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, j as _sfc_main$3 } from "./index-pO-xtezx.js";
2
+ import { u as useModalHandle, _ as _sfc_main$1, B as BSButton, b as _sfc_main$2, j as _sfc_main$3 } from "./index-e3O4IL4V.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 { 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-pO-xtezx.js";
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-e3O4IL4V.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-pO-xtezx.js";
3
- import { _ as _sfc_main$5 } from "./VideoProperties.vue_vue_type_script_setup_true_lang-B2SQASHh.js";
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-e3O4IL4V.js";
3
+ import { _ as _sfc_main$5 } from "./VideoProperties.vue_vue_type_script_setup_true_lang-zEMpmzTZ.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 { k as _sfc_main$1, b as _sfc_main$2, c as _sfc_main$3, v as vT } from "./index-pO-xtezx.js";
2
+ import { k as _sfc_main$1, b as _sfc_main$2, c as _sfc_main$3, v as vT } from "./index-e3O4IL4V.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 { 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-pO-xtezx.js";
3
- import { _ as _sfc_main$4 } from "./VideoProperties.vue_vue_type_script_setup_true_lang-B2SQASHh.js";
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-e3O4IL4V.js";
3
+ import { _ as _sfc_main$4 } from "./VideoProperties.vue_vue_type_script_setup_true_lang-zEMpmzTZ.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-pO-xtezx.js";
3
- import { _ as _sfc_main$4 } from "./YoutubeProperties.vue_vue_type_script_setup_true_lang-CWqGTFe5.js";
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-e3O4IL4V.js";
3
+ import { _ as _sfc_main$4 } from "./YoutubeProperties.vue_vue_type_script_setup_true_lang-B-YVlp4Y.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-pO-xtezx.js";
2
+ import { b as _sfc_main$1, c as _sfc_main$2, v as vT } from "./index-e3O4IL4V.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 { 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-pO-xtezx.js";
3
- import { _ as _sfc_main$4 } from "./YoutubeProperties.vue_vue_type_script_setup_true_lang-CWqGTFe5.js";
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-e3O4IL4V.js";
3
+ import { _ as _sfc_main$4 } from "./YoutubeProperties.vue_vue_type_script_setup_true_lang-B-YVlp4Y.js";
4
4
  const _hoisted_1 = {
5
5
  key: 0,
6
6
  class: "bs-layout-form"
package/dist/bluesea.css CHANGED
@@ -9085,6 +9085,52 @@ span.table-property[data-v-537f70be]:after {
9085
9085
  }
9086
9086
  .bs-media-preview:hover .show-on-hover {
9087
9087
  display: block;
9088
+ }.bs-media-overlay {
9089
+ position: fixed;
9090
+ inset: 0;
9091
+ z-index: 250;
9092
+ background-color: rgba(0, 0, 0, 0.9);
9093
+ display: flex;
9094
+ align-items: center;
9095
+ justify-content: center;
9096
+ }
9097
+ .bs-media-overlay .bs-media-overlay-media {
9098
+ max-width: 95vw;
9099
+ max-height: 95vh;
9100
+ object-fit: contain;
9101
+ }
9102
+ .bs-media-overlay .bs-media-overlay-close {
9103
+ position: absolute;
9104
+ top: 12px;
9105
+ right: 12px;
9106
+ color: var(--white);
9107
+ font-size: 1.8em;
9108
+ background-color: rgba(0, 0, 0, 0.5);
9109
+ border-radius: 4px;
9110
+ padding: 4px;
9111
+ line-height: 1;
9112
+ }
9113
+ .bs-media-overlay .bs-media-overlay-nav {
9114
+ position: absolute;
9115
+ top: 50%;
9116
+ transform: translateY(-50%);
9117
+ color: var(--white);
9118
+ font-size: 3em;
9119
+ background-color: rgba(0, 0, 0, 0.5);
9120
+ border-radius: 4px;
9121
+ padding: 8px 4px;
9122
+ line-height: 1;
9123
+ user-select: none;
9124
+ }
9125
+ .bs-media-overlay .bs-media-overlay-prev {
9126
+ left: 12px;
9127
+ }
9128
+ .bs-media-overlay .bs-media-overlay-next {
9129
+ right: 12px;
9130
+ }
9131
+ .bs-media-overlay .bs-media-overlay-nav-disabled {
9132
+ opacity: 0.25;
9133
+ cursor: default;
9088
9134
  }.bs-image-upload {
9089
9135
  display: inline-block;
9090
9136
  }
@@ -9137,19 +9183,19 @@ span.table-property[data-v-537f70be]:after {
9137
9183
  }
9138
9184
  .bs-image-upload .disabled .image-box {
9139
9185
  border-color: var(--border) !important;
9140
- }.image-upload-move[data-v-b7698f30],
9141
- .image-upload-enter-active[data-v-b7698f30],
9142
- .image-upload-leave-active[data-v-b7698f30] {
9186
+ }.image-upload-move[data-v-e57e268c],
9187
+ .image-upload-enter-active[data-v-e57e268c],
9188
+ .image-upload-leave-active[data-v-e57e268c] {
9143
9189
  transition: all 0.3s ease;
9144
9190
  }
9145
- .image-upload-leave-from[data-v-b7698f30],
9146
- .image-upload-leave-to[data-v-b7698f30] {
9191
+ .image-upload-leave-from[data-v-e57e268c],
9192
+ .image-upload-leave-to[data-v-e57e268c] {
9147
9193
  display: none;
9148
9194
  }
9149
- .image-upload-enter-from[data-v-b7698f30] {
9195
+ .image-upload-enter-from[data-v-e57e268c] {
9150
9196
  opacity: 0;
9151
9197
  }
9152
- .image-upload-leave-active[data-v-b7698f30] {
9198
+ .image-upload-leave-active[data-v-e57e268c] {
9153
9199
  position: absolute;
9154
9200
  }.bs-positioned-image-upload .image-box {
9155
9201
  border: 1px solid var(--border);
package/dist/bluesea.js CHANGED
@@ -1,4 +1,4 @@
1
- import { aN, aO, bL, bM, z, ap, az, B, J, K, a9, k, R, ar, N, F, aA, ct, H, O, av, P, a7, a8, aw, Q, a3, b, h, a5, a4, ac, as, aq, a0, D, ab, aa, G, am, cb, ax, _, a1, aj, al, ak, ai, ah, ag, V, an, ay, j, I, M, at, C, Y, a2, L, E, S, o, d, U, au, a, ao, Z, a6, c, ae, af, X, W, ad, T, A, bT, bb, bS, aX, aC, cy, aB, b2, b0, aZ, $, bR, b4, b3, cD, bJ, bP, b1, bV, bU, bQ, cx, b5, aW, aK, aL, aJ, aM, bO, bN, a$, bK, bA, c5, cC, bf, bm, c4, cM, ch, bW, c1, c0, aT, f, bD, cj, aU, cs, ba, cw, cz, g, ce, a_, bi, cQ, aP, b7, bj, aQ, aS, aR, b9, b$, bx, by, bz, bu, bw, bv, e, bt, bq, p, cF, aV, b8, cq, cm, cE, bZ, aF, cN, cK, cO, bE, cL, bF, c3, c2, cn, bn, i, b_, bp, bl, cP, b6, ca, c9, aY, bY, n, cf, bX, cJ, cA, c6, cd, bB, bc, bg, bI, c8, bG, bH, ci, cp, co, cg, cl, bo, aE, bk, ck, cI, cu, cv, cB, c7, cc, u, bC, bd, be, bh, aD, aH, aI, l, v, aG, br, bs, cH, cG, cr } from "./index-pO-xtezx.js";
1
+ import { aN, aO, bL, bM, z, ap, az, B, J, K, a9, k, R, ar, N, F, aA, ct, H, O, av, P, a7, a8, aw, Q, a3, b, h, a5, a4, ac, as, aq, a0, D, ab, aa, G, am, cb, ax, _, a1, aj, al, ak, ai, ah, ag, V, an, ay, j, I, M, at, C, Y, a2, L, E, S, o, d, U, au, a, ao, Z, a6, c, ae, af, X, W, ad, T, A, bT, bb, bS, aX, aC, cy, aB, b2, b0, aZ, $, bR, b4, b3, cD, bJ, bP, b1, bV, bU, bQ, cx, b5, aW, aK, aL, aJ, aM, bO, bN, a$, bK, bA, c5, cC, bf, bm, c4, cM, ch, bW, c1, c0, aT, f, bD, cj, aU, cs, ba, cw, cz, g, ce, a_, bi, cQ, aP, b7, bj, aQ, aS, aR, b9, b$, bx, by, bz, bu, bw, bv, e, bt, bq, p, cF, aV, b8, cq, cm, cE, bZ, aF, cN, cK, cO, bE, cL, bF, c3, c2, cn, bn, i, b_, bp, bl, cP, b6, ca, c9, aY, bY, n, cf, bX, cJ, cA, c6, cd, bB, bc, bg, bI, c8, bG, bH, ci, cp, co, cg, cl, bo, aE, bk, ck, cI, cu, cv, cB, c7, cc, u, bC, bd, be, bh, aD, aH, aI, l, v, aG, br, bs, cH, cG, cr } from "./index-e3O4IL4V.js";
2
2
  export {
3
3
  aN as ADDRESS_COUNTRY_CONFIGS,
4
4
  aO as ADDRESS_COUNTRY_CONFIG_DEFAULT,