@g1cloud/bluesea 5.0.0-beta.27 → 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 (34) hide show
  1. package/README.md +21 -0
  2. package/bin/install-claude-skill.mjs +74 -0
  3. package/dist/{BSAlertModal-DT2Wai4R.js → BSAlertModal-BpbJuAe1.js} +1 -1
  4. package/dist/{BSGridColumnSettingModal-CUMe_yWj.js → BSGridColumnSettingModal-8MqhRWkU.js} +1 -1
  5. package/dist/{BSRichTextMaximizedModal-CaaSAgmI.js → BSRichTextMaximizedModal-C86Skc5v.js} +1 -1
  6. package/dist/{BSYesNoModal-C91E2MSF.js → BSYesNoModal-CHbktVAj.js} +1 -1
  7. package/dist/{BSYoutubeInputModal-DSI-NoGb.js → BSYoutubeInputModal-JKnr4hGE.js} +1 -1
  8. package/dist/{ImageInsertModal-7u7YeHsI.js → ImageInsertModal-DQwkQJ8b.js} +2 -2
  9. package/dist/{ImageProperties.vue_vue_type_script_setup_true_lang-CSHlFWfd.js → ImageProperties.vue_vue_type_script_setup_true_lang-BsMcsXdh.js} +1 -1
  10. package/dist/{ImagePropertiesModal-HRPdVJRK.js → ImagePropertiesModal-X7blKqTy.js} +2 -2
  11. package/dist/{LinkPropertiesModal-x73isyqI.js → LinkPropertiesModal-DGiiTivW.js} +1 -1
  12. package/dist/{TableInsertModal-BfWLdDCa.js → TableInsertModal-CupFfnOG.js} +1 -1
  13. package/dist/{TablePropertiesModal-D1wSXQ3C.js → TablePropertiesModal-CfK9i7Q5.js} +1 -1
  14. package/dist/{VideoInsertModal-DQ-wO6_P.js → VideoInsertModal-BwRRgibx.js} +2 -2
  15. package/dist/{VideoProperties.vue_vue_type_script_setup_true_lang-D73f1tdh.js → VideoProperties.vue_vue_type_script_setup_true_lang-zEMpmzTZ.js} +1 -1
  16. package/dist/{VideoPropertiesModal-BYADjPfV.js → VideoPropertiesModal-Dn6AzhPy.js} +2 -2
  17. package/dist/{YoutubeInsertModal-DNq4v5Ll.js → YoutubeInsertModal-DCn5bhN5.js} +2 -2
  18. package/dist/{YoutubeProperties.vue_vue_type_script_setup_true_lang-CWIVZP3H.js → YoutubeProperties.vue_vue_type_script_setup_true_lang-B-YVlp4Y.js} +1 -1
  19. package/dist/{YoutubePropertiesModal-D2-7I2sg.js → YoutubePropertiesModal-Dg-n8cTv.js} +2 -2
  20. package/dist/bluesea.js +1 -1
  21. package/dist/bluesea.umd.cjs +9 -2
  22. package/dist/{index-BIvcVEog.js → index-e3O4IL4V.js} +25 -18
  23. package/dist/text/i18n.d.ts +2 -1
  24. package/package.json +6 -1
  25. package/skills/bluesea-ui/SKILL.md +312 -0
  26. package/skills/bluesea-ui/references/components.md +189 -0
  27. package/skills/bluesea-ui/references/grid.md +159 -0
  28. package/skills/bluesea-ui/references/i18n.md +126 -0
  29. package/skills/bluesea-ui/references/validation.md +176 -0
  30. package/text/bluesea_text_en.json +248 -964
  31. package/text/bluesea_text_fr.json +248 -964
  32. package/text/bluesea_text_ja.json +248 -964
  33. package/text/bluesea_text_ko.json +248 -964
  34. 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
+ })
@@ -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-BIvcVEog.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-BIvcVEog.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-BIvcVEog.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-BIvcVEog.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-BIvcVEog.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-BIvcVEog.js";
3
- import { _ as _sfc_main$5 } from "./ImageProperties.vue_vue_type_script_setup_true_lang-CSHlFWfd.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-BIvcVEog.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-BIvcVEog.js";
3
- import { _ as _sfc_main$4 } from "./ImageProperties.vue_vue_type_script_setup_true_lang-CSHlFWfd.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-BIvcVEog.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-BIvcVEog.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-BIvcVEog.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-BIvcVEog.js";
3
- import { _ as _sfc_main$5 } from "./VideoProperties.vue_vue_type_script_setup_true_lang-D73f1tdh.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-BIvcVEog.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-BIvcVEog.js";
3
- import { _ as _sfc_main$4 } from "./VideoProperties.vue_vue_type_script_setup_true_lang-D73f1tdh.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-BIvcVEog.js";
3
- import { _ as _sfc_main$4 } from "./YoutubeProperties.vue_vue_type_script_setup_true_lang-CWIVZP3H.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-BIvcVEog.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-BIvcVEog.js";
3
- import { _ as _sfc_main$4 } from "./YoutubeProperties.vue_vue_type_script_setup_true_lang-CWIVZP3H.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.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-BIvcVEog.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,
@@ -528,9 +528,16 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
528
528
  constructor() {
529
529
  __publicField(this, "localeTexts", {});
530
530
  }
531
- addTexts(locale, textList) {
531
+ addTexts(locale, input) {
532
532
  const text = this.ensureAddLocale(locale);
533
- textList.forEach((t2) => text[t2.key] = t2);
533
+ if (Array.isArray(input)) {
534
+ input.forEach((t2) => text[t2.key] = t2);
535
+ } else {
536
+ for (const key in input) {
537
+ const v = input[key];
538
+ text[key] = Array.isArray(v) ? { key, text: String(v[0]), html: !!v[1] } : { key, text: v };
539
+ }
540
+ }
534
541
  }
535
542
  /**
536
543
  * 현재 언어코드에서 `key` 에 해당하는 `TextRecord` 를 리턴한다.
@@ -368,8 +368,8 @@ const defaultAddressInputComponentConfig = {
368
368
  countryConfigs: ADDRESS_COUNTRY_CONFIGS
369
369
  };
370
370
  const defaultRichTextComponentConfig = {
371
- imageInsertModal: defineAsyncComponent(() => import("./ImageInsertModal-7u7YeHsI.js")),
372
- videoInsertModal: defineAsyncComponent(() => import("./VideoInsertModal-DQ-wO6_P.js")),
371
+ imageInsertModal: defineAsyncComponent(() => import("./ImageInsertModal-DQwkQJ8b.js")),
372
+ videoInsertModal: defineAsyncComponent(() => import("./VideoInsertModal-BwRRgibx.js")),
373
373
  toolButtons: [
374
374
  "Heading",
375
375
  "FontSize",
@@ -528,9 +528,16 @@ class I18NTexts {
528
528
  constructor() {
529
529
  __publicField(this, "localeTexts", {});
530
530
  }
531
- addTexts(locale, textList) {
531
+ addTexts(locale, input) {
532
532
  const text = this.ensureAddLocale(locale);
533
- textList.forEach((t2) => text[t2.key] = t2);
533
+ if (Array.isArray(input)) {
534
+ input.forEach((t2) => text[t2.key] = t2);
535
+ } else {
536
+ for (const key in input) {
537
+ const v = input[key];
538
+ text[key] = Array.isArray(v) ? { key, text: String(v[0]), html: !!v[1] } : { key, text: v };
539
+ }
540
+ }
534
541
  }
535
542
  /**
536
543
  * 현재 언어코드에서 `key` 에 해당하는 `TextRecord` 를 리턴한다.
@@ -6336,7 +6343,7 @@ class BSModal {
6336
6343
  }
6337
6344
  openAlert(title, message, clickHandler2) {
6338
6345
  const option = {
6339
- component: defineAsyncComponent(() => import("./BSAlertModal-DT2Wai4R.js")),
6346
+ component: defineAsyncComponent(() => import("./BSAlertModal-BpbJuAe1.js")),
6340
6347
  bind: {
6341
6348
  title,
6342
6349
  message
@@ -6349,7 +6356,7 @@ class BSModal {
6349
6356
  }
6350
6357
  openYesNo(title, message, yesHandler, noHandler) {
6351
6358
  const option = {
6352
- component: defineAsyncComponent(() => import("./BSYesNoModal-C91E2MSF.js")),
6359
+ component: defineAsyncComponent(() => import("./BSYesNoModal-CHbktVAj.js")),
6353
6360
  bind: {
6354
6361
  title,
6355
6362
  message
@@ -31483,13 +31490,13 @@ const tableContextMenus = (modal, editor) => {
31483
31490
  };
31484
31491
  const showTableProperties = (modal, editor) => {
31485
31492
  modal.openModal({
31486
- component: defineAsyncComponent(() => import("./TablePropertiesModal-D1wSXQ3C.js")),
31493
+ component: defineAsyncComponent(() => import("./TablePropertiesModal-CfK9i7Q5.js")),
31487
31494
  bind: { editor }
31488
31495
  });
31489
31496
  };
31490
31497
  const insertTable = (modal, editor) => {
31491
31498
  modal.openModal({
31492
- component: defineAsyncComponent(() => import("./TableInsertModal-BfWLdDCa.js")),
31499
+ component: defineAsyncComponent(() => import("./TableInsertModal-CupFfnOG.js")),
31493
31500
  bind: { editor }
31494
31501
  });
31495
31502
  };
@@ -31654,7 +31661,7 @@ const insertImage = (modal, editor) => {
31654
31661
  const component = (_a2 = blueseaConfig.componentConfig.richText) == null ? void 0 : _a2.imageInsertModal;
31655
31662
  if (component) {
31656
31663
  modal.openModal({
31657
- component: defineAsyncComponent(() => import("./ImageInsertModal-7u7YeHsI.js")),
31664
+ component: defineAsyncComponent(() => import("./ImageInsertModal-DQwkQJ8b.js")),
31658
31665
  bind: { editor },
31659
31666
  on: {
31660
31667
  insertImage: (image) => {
@@ -31672,7 +31679,7 @@ const insertImage = (modal, editor) => {
31672
31679
  };
31673
31680
  const showImageProperties = (modal, editor) => {
31674
31681
  modal.openModal({
31675
- component: defineAsyncComponent(() => import("./ImagePropertiesModal-HRPdVJRK.js")),
31682
+ component: defineAsyncComponent(() => import("./ImagePropertiesModal-X7blKqTy.js")),
31676
31683
  bind: { editor }
31677
31684
  });
31678
31685
  };
@@ -32033,13 +32040,13 @@ const youtubeContextMenu = (modal, editor) => {
32033
32040
  };
32034
32041
  const insertYoutube = (modal, editor) => {
32035
32042
  modal.openModal({
32036
- component: defineAsyncComponent(() => import("./YoutubeInsertModal-DNq4v5Ll.js")),
32043
+ component: defineAsyncComponent(() => import("./YoutubeInsertModal-DCn5bhN5.js")),
32037
32044
  bind: { editor }
32038
32045
  });
32039
32046
  };
32040
32047
  const showYoutubeProperties = (modal, editor) => {
32041
32048
  modal.openModal({
32042
- component: defineAsyncComponent(() => import("./YoutubePropertiesModal-D2-7I2sg.js")),
32049
+ component: defineAsyncComponent(() => import("./YoutubePropertiesModal-Dg-n8cTv.js")),
32043
32050
  bind: { editor }
32044
32051
  });
32045
32052
  };
@@ -32083,7 +32090,7 @@ const _sfc_main$15 = /* @__PURE__ */ defineComponent({
32083
32090
  const showLinkProperties = () => {
32084
32091
  if (!props.disabled) {
32085
32092
  modal.openModal({
32086
- component: defineAsyncComponent(() => import("./LinkPropertiesModal-x73isyqI.js")),
32093
+ component: defineAsyncComponent(() => import("./LinkPropertiesModal-DGiiTivW.js")),
32087
32094
  bind: {
32088
32095
  editor: props.editor
32089
32096
  }
@@ -32448,7 +32455,7 @@ const insertVideo = (modal, editor) => {
32448
32455
  const component = (_a2 = blueseaConfig.componentConfig.richText) == null ? void 0 : _a2.videoInsertModal;
32449
32456
  if (component) {
32450
32457
  modal.openModal({
32451
- component: defineAsyncComponent(() => import("./VideoInsertModal-DQ-wO6_P.js")),
32458
+ component: defineAsyncComponent(() => import("./VideoInsertModal-BwRRgibx.js")),
32452
32459
  bind: { editor },
32453
32460
  on: {
32454
32461
  insertVideo: (video) => {
@@ -32466,7 +32473,7 @@ const insertVideo = (modal, editor) => {
32466
32473
  };
32467
32474
  const showVideoProperties = (modal, editor) => {
32468
32475
  modal.openModal({
32469
- component: defineAsyncComponent(() => import("./VideoPropertiesModal-BYADjPfV.js")),
32476
+ component: defineAsyncComponent(() => import("./VideoPropertiesModal-Dn6AzhPy.js")),
32470
32477
  bind: { editor }
32471
32478
  });
32472
32479
  };
@@ -34644,7 +34651,7 @@ const _sfc_main$Z = /* @__PURE__ */ defineComponent({
34644
34651
  emit("maximized");
34645
34652
  if (!props.internalMaximized) {
34646
34653
  modal.openModal({
34647
- component: defineAsyncComponent(() => import("./BSRichTextMaximizedModal-CaaSAgmI.js")),
34654
+ component: defineAsyncComponent(() => import("./BSRichTextMaximizedModal-C86Skc5v.js")),
34648
34655
  bind: {
34649
34656
  modelValue: getEditorValue(),
34650
34657
  contentMaxWidth: props.contentMaxWidth,
@@ -35301,7 +35308,7 @@ const _sfc_main$W = /* @__PURE__ */ defineComponent({
35301
35308
  const modal = useModal();
35302
35309
  const enterYoutubeUrl = () => {
35303
35310
  modal.openModal({
35304
- component: defineAsyncComponent(() => import("./BSYoutubeInputModal-DSI-NoGb.js")),
35311
+ component: defineAsyncComponent(() => import("./BSYoutubeInputModal-JKnr4hGE.js")),
35305
35312
  on: {
35306
35313
  "update:modelValue": (url) => {
35307
35314
  emit("update:modelValue", {
@@ -39007,7 +39014,7 @@ const _sfc_main$D = /* @__PURE__ */ defineComponent({
39007
39014
  const modal = useModal();
39008
39015
  const openSettingModal = () => {
39009
39016
  modal.openModal({
39010
- component: defineAsyncComponent(() => import("./BSGridColumnSettingModal-CUMe_yWj.js")),
39017
+ component: defineAsyncComponent(() => import("./BSGridColumnSettingModal-8MqhRWkU.js")),
39011
39018
  bind: {
39012
39019
  columns: props.columns,
39013
39020
  columnSettings: props.columnSettings,
@@ -6,9 +6,10 @@ export type TextRecord = {
6
6
  export type ResolvedTextRecord = TextRecord & {
7
7
  resolved: boolean;
8
8
  };
9
+ export type CompactTexts = Record<string, string | (string | number)[]>;
9
10
  export declare class I18NTexts {
10
11
  private localeTexts;
11
- addTexts(locale: string, textList: TextRecord[]): void;
12
+ addTexts(locale: string, input: TextRecord[] | CompactTexts): void;
12
13
  /**
13
14
  * 현재 언어코드에서 `key` 에 해당하는 `TextRecord` 를 리턴한다.
14
15
  * @param key
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@g1cloud/bluesea",
3
3
  "private": false,
4
- "version": "5.0.0-beta.27",
4
+ "version": "5.0.0-beta.28",
5
5
  "description": "Ui Library for g1cloud BackOffice.",
6
6
  "type": "module",
7
7
  "engines": {
@@ -14,11 +14,16 @@
14
14
  "css",
15
15
  "scss",
16
16
  "text",
17
+ "skills",
18
+ "bin",
17
19
  "!dist/tests"
18
20
  ],
19
21
  "module": "dist/bluesea.js",
20
22
  "main": "dist/bluesea.js",
21
23
  "types": "dist/index.d.ts",
24
+ "bin": {
25
+ "bluesea-install-skill": "./bin/install-claude-skill.mjs"
26
+ },
22
27
  "dependencies": {
23
28
  "@codemirror/lang-css": "^6.2.1",
24
29
  "@codemirror/lang-html": "^6.4.9",