@g1cloud/bluesea 5.0.0-beta.1 → 5.0.0-beta.3

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 (43) hide show
  1. package/css/bluesea.css +358 -278
  2. package/css/frame-default.css +16 -12
  3. package/dist/{BSAlertModal-BixCrZDD.js → BSAlertModal-xBi30_WT.js} +1 -1
  4. package/dist/{BSGridColumnSettingModal-CVVenSnr.js → BSGridColumnSettingModal-CGOmNxYg.js} +1 -1
  5. package/dist/{BSRichTextMaximizedModal-BqzE5__U.js → BSRichTextMaximizedModal-bwfs_ETq.js} +1 -1
  6. package/dist/{BSYesNoModal-B5lERw_k.js → BSYesNoModal-g_jspSyV.js} +1 -1
  7. package/dist/{BSYoutubeInputModal-eRBqHjeW.js → BSYoutubeInputModal-gxqSatHw.js} +1 -1
  8. package/dist/{ImageInsertModal-DvKLXL1n.js → ImageInsertModal-BjQMX1aF.js} +2 -2
  9. package/dist/{ImageProperties.vue_vue_type_script_setup_true_lang-DVUZuLfG.js → ImageProperties.vue_vue_type_script_setup_true_lang-DngZdEN7.js} +1 -1
  10. package/dist/{ImagePropertiesModal-Dsg6BS63.js → ImagePropertiesModal-BVMSRdqN.js} +2 -2
  11. package/dist/{LinkPropertiesModal-Ct0ykD4j.js → LinkPropertiesModal-CjQMdxnd.js} +1 -1
  12. package/dist/{TableInsertModal-BhyzkcTU.js → TableInsertModal-W9oMIgb_.js} +1 -1
  13. package/dist/TablePropertiesModal-rKhKzzYG.js +353 -0
  14. package/dist/{VideoInsertModal-BAwRYBzU.js → VideoInsertModal-DMtZM5vy.js} +2 -2
  15. package/dist/{VideoProperties.vue_vue_type_script_setup_true_lang-BfwBHyER.js → VideoProperties.vue_vue_type_script_setup_true_lang-CbE-PZdm.js} +1 -1
  16. package/dist/{VideoPropertiesModal-B2FeEw4W.js → VideoPropertiesModal-CLkvzq3Y.js} +2 -2
  17. package/dist/{YoutubeInsertModal-EU6G-021.js → YoutubeInsertModal-4_qANoY5.js} +3 -3
  18. package/dist/{YoutubeProperties.vue_vue_type_script_setup_true_lang-Ci3ndkZR.js → YoutubeProperties.vue_vue_type_script_setup_true_lang-B-LT9GYf.js} +1 -1
  19. package/dist/{YoutubePropertiesModal-CRy6zJwZ.js → YoutubePropertiesModal-BKwZsK6d.js} +2 -2
  20. package/dist/bluesea.css +304 -228
  21. package/dist/bluesea.js +21 -21
  22. package/dist/bluesea.umd.cjs +433 -197
  23. package/dist/component/input/BSMultiSelect.vue.d.ts +6 -6
  24. package/dist/component/input/BSSelect.vue.d.ts +6 -6
  25. package/dist/component/input/BSSelectPopup.vue.d.ts +6 -6
  26. package/dist/component/input/BSTreeMultiSelect.vue.d.ts +6 -6
  27. package/dist/component/input/BSTreeSelect.vue.d.ts +6 -6
  28. package/dist/component/richtext/RichTextModel.d.ts +1 -0
  29. package/dist/component/richtext/richTextUtil.d.ts +1 -1
  30. package/dist/component/richtext/table/RichTextTableCell.d.ts +1 -0
  31. package/dist/component/richtext/table/RichTextTableLib.d.ts +7 -1
  32. package/dist/component/tree/BSTree.vue.d.ts +3 -3
  33. package/dist/component/tree/BSTreeRow.vue.d.ts +3 -3
  34. package/dist/directive/vT.d.ts +1 -0
  35. package/dist/{index-CDwzpZX0.js → index-BQZ3zTp7.js} +160 -93
  36. package/package.json +3 -3
  37. package/scss/component.scss +18 -14
  38. package/text/bluesea_text_en.json +12 -0
  39. package/text/bluesea_text_fr.json +12 -0
  40. package/text/bluesea_text_ja.json +12 -0
  41. package/text/bluesea_text_ko.json +12 -0
  42. package/text/bluesea_text_zh.json +12 -0
  43. package/dist/TablePropertiesModal-BAxcByTD.js +0 -184
@@ -87,8 +87,8 @@ const defaultAddressInputComponentConfig = {
87
87
  countryConfigs: ADDRESS_COUNTRY_CONFIGS
88
88
  };
89
89
  const defaultRichTextComponentConfig = {
90
- imageInsertModal: defineAsyncComponent(() => import("./ImageInsertModal-DvKLXL1n.js")),
91
- videoInsertModal: defineAsyncComponent(() => import("./VideoInsertModal-BAwRYBzU.js")),
90
+ imageInsertModal: defineAsyncComponent(() => import("./ImageInsertModal-BjQMX1aF.js")),
91
+ videoInsertModal: defineAsyncComponent(() => import("./VideoInsertModal-DMtZM5vy.js")),
92
92
  toolButtons: [
93
93
  "Heading",
94
94
  "FontSize",
@@ -5968,7 +5968,7 @@ class BSModal {
5968
5968
  }
5969
5969
  openAlert(title, message, clickHandler2) {
5970
5970
  const option = {
5971
- component: defineAsyncComponent(() => import("./BSAlertModal-BixCrZDD.js")),
5971
+ component: defineAsyncComponent(() => import("./BSAlertModal-xBi30_WT.js")),
5972
5972
  bind: {
5973
5973
  title,
5974
5974
  message
@@ -5981,7 +5981,7 @@ class BSModal {
5981
5981
  }
5982
5982
  openYesNo(title, message, yesHandler, noHandler) {
5983
5983
  const option = {
5984
- component: defineAsyncComponent(() => import("./BSYesNoModal-B5lERw_k.js")),
5984
+ component: defineAsyncComponent(() => import("./BSYesNoModal-g_jspSyV.js")),
5985
5985
  bind: {
5986
5986
  title,
5987
5987
  message
@@ -28352,43 +28352,6 @@ const TableRow = Node2.create({
28352
28352
  return ["tr", mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];
28353
28353
  }
28354
28354
  });
28355
- const TableCell = Node2.create({
28356
- name: "tableCell",
28357
- addOptions() {
28358
- return {
28359
- HTMLAttributes: {}
28360
- };
28361
- },
28362
- content: "block+",
28363
- addAttributes() {
28364
- return {
28365
- colspan: {
28366
- default: 1
28367
- },
28368
- rowspan: {
28369
- default: 1
28370
- },
28371
- colwidth: {
28372
- default: null,
28373
- parseHTML: (element) => {
28374
- const colwidth = element.getAttribute("colwidth");
28375
- const value = colwidth ? colwidth.split(",").map((width) => parseInt(width, 10)) : null;
28376
- return value;
28377
- }
28378
- }
28379
- };
28380
- },
28381
- tableRole: "cell",
28382
- isolating: true,
28383
- parseHTML() {
28384
- return [
28385
- { tag: "td" }
28386
- ];
28387
- },
28388
- renderHTML({ HTMLAttributes }) {
28389
- return ["td", mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];
28390
- }
28391
- });
28392
28355
  const _hoisted_1$X = { class: "tool-button-font-size bs-layout-horizontal align-items-center" };
28393
28356
  const _hoisted_2$E = ["disabled", "value"];
28394
28357
  const _sfc_main$18 = /* @__PURE__ */ defineComponent({
@@ -31022,10 +30985,11 @@ const renderHTMLAttr = (attr) => {
31022
30985
  const parseHTMLStyle = (attr) => {
31023
30986
  return (element) => element.style[attr];
31024
30987
  };
31025
- const renderHTMLStyle = (attr) => {
30988
+ const renderHTMLStyle = (attr, attrName2) => {
31026
30989
  return (attrs) => {
31027
30990
  const kebabCaseName = attr.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase();
31028
- return attrs[attr] ? { style: `${kebabCaseName}: ${attrs[attr]}` } : void 0;
30991
+ const value = attrs[attrName2 || attr];
30992
+ return value ? { style: `${kebabCaseName}: ${value}` } : void 0;
31029
30993
  };
31030
30994
  };
31031
30995
  const createStyleString = (attr, names) => {
@@ -31038,6 +31002,15 @@ const RichTextTable = Table.extend({
31038
31002
  height: { parseHTML: parseHTMLStyle("height"), renderHTML: renderHTMLStyle("height") },
31039
31003
  maxWidth: { parseHTML: parseHTMLStyle("maxWidth"), renderHTML: renderHTMLStyle("maxWidth") },
31040
31004
  maxHeight: { parseHTML: parseHTMLStyle("maxHeight"), renderHTML: renderHTMLStyle("maxHeight") },
31005
+ marginLeft: { parseHTML: parseHTMLStyle("marginLeft"), renderHTML: renderHTMLStyle("marginLeft") },
31006
+ marginTop: { parseHTML: parseHTMLStyle("marginTop"), renderHTML: renderHTMLStyle("marginTop") },
31007
+ marginRight: { parseHTML: parseHTMLStyle("marginRight"), renderHTML: renderHTMLStyle("marginRight") },
31008
+ marginBottom: { parseHTML: parseHTMLStyle("marginBottom"), renderHTML: renderHTMLStyle("marginBottom") },
31009
+ tableAlign: {
31010
+ default: "",
31011
+ parseHTML: parseHTMLStyle("alignSelf"),
31012
+ renderHTML: renderHTMLStyle("alignSelf", "tableAlign")
31013
+ },
31041
31014
  class: {
31042
31015
  default: void 0,
31043
31016
  parseHTML: (element) => element.className,
@@ -31050,6 +31023,13 @@ const RichTextTable = Table.extend({
31050
31023
  renderHTML: (props) => {
31051
31024
  var _a2;
31052
31025
  const result = (_a2 = Table.config.renderHTML) == null ? void 0 : _a2.apply(Table, [props]);
31026
+ if (Array.isArray(result) && result.length > 1) {
31027
+ const attrs = result[1];
31028
+ attrs.style = props.HTMLAttributes.style;
31029
+ }
31030
+ if (Array.isArray(result) && result.length > 2 && result[2][0] === "colgroup") {
31031
+ result.splice(2, 1);
31032
+ }
31053
31033
  return [
31054
31034
  "div",
31055
31035
  { class: "table-wrapper" },
@@ -31113,13 +31093,13 @@ const tableContextMenus = (modal, editor) => {
31113
31093
  };
31114
31094
  const showTableProperties = (modal, editor) => {
31115
31095
  modal.openModal({
31116
- component: defineAsyncComponent(() => import("./TablePropertiesModal-BAxcByTD.js")),
31096
+ component: defineAsyncComponent(() => import("./TablePropertiesModal-rKhKzzYG.js")),
31117
31097
  bind: { editor }
31118
31098
  });
31119
31099
  };
31120
31100
  const insertTable = (modal, editor) => {
31121
31101
  modal.openModal({
31122
- component: defineAsyncComponent(() => import("./TableInsertModal-BhyzkcTU.js")),
31102
+ component: defineAsyncComponent(() => import("./TableInsertModal-W9oMIgb_.js")),
31123
31103
  bind: { editor }
31124
31104
  });
31125
31105
  };
@@ -31284,7 +31264,7 @@ const insertImage = (modal, editor) => {
31284
31264
  const component = (_a2 = blueseaConfig.componentConfig.richText) == null ? void 0 : _a2.imageInsertModal;
31285
31265
  if (component) {
31286
31266
  modal.openModal({
31287
- component: defineAsyncComponent(() => import("./ImageInsertModal-DvKLXL1n.js")),
31267
+ component: defineAsyncComponent(() => import("./ImageInsertModal-BjQMX1aF.js")),
31288
31268
  bind: { editor },
31289
31269
  on: {
31290
31270
  insertImage: (image) => {
@@ -31302,7 +31282,7 @@ const insertImage = (modal, editor) => {
31302
31282
  };
31303
31283
  const showImageProperties = (modal, editor) => {
31304
31284
  modal.openModal({
31305
- component: defineAsyncComponent(() => import("./ImagePropertiesModal-Dsg6BS63.js")),
31285
+ component: defineAsyncComponent(() => import("./ImagePropertiesModal-BVMSRdqN.js")),
31306
31286
  bind: { editor }
31307
31287
  });
31308
31288
  };
@@ -31595,16 +31575,23 @@ const RichTextYoutube = Youtube.extend({
31595
31575
  start: {
31596
31576
  default: 0
31597
31577
  },
31598
- width: { parseHTML: parseHTMLStyle("width"), renderHTML: renderHTMLStyle("width") },
31599
- height: { parseHTML: parseHTMLStyle("height"), renderHTML: renderHTMLStyle("height") },
31600
- maxWidth: { parseHTML: parseHTMLStyle("maxWidth"), renderHTML: renderHTMLStyle("maxWidth") },
31601
- maxHeight: { parseHTML: parseHTMLStyle("maxHeight"), renderHTML: renderHTMLStyle("maxHeight") },
31602
- marginLeft: { parseHTML: parseHTMLStyle("marginLeft"), renderHTML: renderHTMLStyle("marginLeft") },
31603
- marginTop: { parseHTML: parseHTMLStyle("marginTop"), renderHTML: renderHTMLStyle("marginTop") },
31604
- marginRight: { parseHTML: parseHTMLStyle("marginRight"), renderHTML: renderHTMLStyle("marginRight") },
31605
- marginBottom: { parseHTML: parseHTMLStyle("marginBottom"), renderHTML: renderHTMLStyle("marginBottom") }
31578
+ width: { parseHTML: parseWrapperHTMLStyle("width"), renderHTML: renderHTMLStyle("width") },
31579
+ height: { parseHTML: parseWrapperHTMLStyle("height"), renderHTML: renderHTMLStyle("height") },
31580
+ maxWidth: { parseHTML: parseWrapperHTMLStyle("maxWidth"), renderHTML: renderHTMLStyle("maxWidth") },
31581
+ maxHeight: { parseHTML: parseWrapperHTMLStyle("maxHeight"), renderHTML: renderHTMLStyle("maxHeight") },
31582
+ marginLeft: { parseHTML: parseWrapperHTMLStyle("marginLeft"), renderHTML: renderHTMLStyle("marginLeft") },
31583
+ marginTop: { parseHTML: parseWrapperHTMLStyle("marginTop"), renderHTML: renderHTMLStyle("marginTop") },
31584
+ marginRight: { parseHTML: parseWrapperHTMLStyle("marginRight"), renderHTML: renderHTMLStyle("marginRight") },
31585
+ marginBottom: { parseHTML: parseWrapperHTMLStyle("marginBottom"), renderHTML: renderHTMLStyle("marginBottom") }
31606
31586
  };
31607
31587
  },
31588
+ parseHTML() {
31589
+ return [
31590
+ {
31591
+ tag: "span[data-youtube-video] iframe"
31592
+ }
31593
+ ];
31594
+ },
31608
31595
  // Youtube extension 에서는 div 로 감싸는데, p 안에 div 가 들어갈 수 없어, span 으로 변경함.
31609
31596
  renderHTML: (props) => {
31610
31597
  var _a2;
@@ -31616,14 +31603,21 @@ const RichTextYoutube = Youtube.extend({
31616
31603
  const iframeAttr = result[2][1];
31617
31604
  delete iframeAttr.width;
31618
31605
  delete iframeAttr.height;
31619
- iframeAttr.style = `width: 100%; height:100%;`;
31606
+ iframeAttr.style = `width: 100%; height:100%; ${args.style};`;
31620
31607
  return ["span", args, [iframe, iframeAttr]];
31621
31608
  }
31622
31609
  return "span";
31623
31610
  }
31624
31611
  });
31612
+ const parseWrapperHTMLStyle = (attr) => {
31613
+ return (element) => {
31614
+ var _a2;
31615
+ return (_a2 = element.parentElement) == null ? void 0 : _a2.style[attr];
31616
+ };
31617
+ };
31625
31618
  const createWrapperStyle = (attrs) => {
31626
31619
  if (!attrs.aspectRatio) attrs.aspectRatio = "16/9";
31620
+ if (!attrs.width) attrs.width = "100%";
31627
31621
  attrs = normalizeYoutubeInfoData(attrs);
31628
31622
  const styleKeys = ["aspectRatio", "width", "height", "maxWidth", "maxHeight", "marginLeft", "marginTop", "marginRight", "marginBottom"];
31629
31623
  const styles = [];
@@ -31649,13 +31643,13 @@ const youtubeContextMenu = (modal, editor) => {
31649
31643
  };
31650
31644
  const insertYoutube = (modal, editor) => {
31651
31645
  modal.openModal({
31652
- component: defineAsyncComponent(() => import("./YoutubeInsertModal-EU6G-021.js")),
31646
+ component: defineAsyncComponent(() => import("./YoutubeInsertModal-4_qANoY5.js")),
31653
31647
  bind: { editor }
31654
31648
  });
31655
31649
  };
31656
31650
  const showYoutubeProperties = (modal, editor) => {
31657
31651
  modal.openModal({
31658
- component: defineAsyncComponent(() => import("./YoutubePropertiesModal-CRy6zJwZ.js")),
31652
+ component: defineAsyncComponent(() => import("./YoutubePropertiesModal-BKwZsK6d.js")),
31659
31653
  bind: { editor }
31660
31654
  });
31661
31655
  };
@@ -31699,7 +31693,7 @@ const _sfc_main$13 = /* @__PURE__ */ defineComponent({
31699
31693
  const showLinkProperties = () => {
31700
31694
  if (!props.disabled) {
31701
31695
  modal.openModal({
31702
- component: defineAsyncComponent(() => import("./LinkPropertiesModal-Ct0ykD4j.js")),
31696
+ component: defineAsyncComponent(() => import("./LinkPropertiesModal-CjQMdxnd.js")),
31703
31697
  bind: {
31704
31698
  editor: props.editor
31705
31699
  }
@@ -32064,7 +32058,7 @@ const insertVideo = (modal, editor) => {
32064
32058
  const component = (_a2 = blueseaConfig.componentConfig.richText) == null ? void 0 : _a2.videoInsertModal;
32065
32059
  if (component) {
32066
32060
  modal.openModal({
32067
- component: defineAsyncComponent(() => import("./VideoInsertModal-BAwRYBzU.js")),
32061
+ component: defineAsyncComponent(() => import("./VideoInsertModal-DMtZM5vy.js")),
32068
32062
  bind: { editor },
32069
32063
  on: {
32070
32064
  insertVideo: (video) => {
@@ -32082,7 +32076,7 @@ const insertVideo = (modal, editor) => {
32082
32076
  };
32083
32077
  const showVideoProperties = (modal, editor) => {
32084
32078
  modal.openModal({
32085
- component: defineAsyncComponent(() => import("./VideoPropertiesModal-B2FeEw4W.js")),
32079
+ component: defineAsyncComponent(() => import("./VideoPropertiesModal-CLkvzq3Y.js")),
32086
32080
  bind: { editor }
32087
32081
  });
32088
32082
  };
@@ -33988,6 +33982,70 @@ class RichTextTableView {
33988
33982
  }
33989
33983
  const richTextContentStyle = '.rich-text-content {\n font-size: 14px;\n}\n.rich-text-content * {\n line-height: 1.4em;\n}\n.rich-text-content p {\n margin: 0 0 4px 0;\n padding: 0;\n}\n.rich-text-content p:empty:before {\n content: " ";\n white-space: pre;\n}\n.rich-text-content pre {\n background-color: #eee;\n padding: 8px;\n margin: 8px 0;\n border-radius: 4px;\n font-family: "Lucida Console", sans-serif;\n}\n.rich-text-content h1 {\n font-size: 1.8rem;\n margin: 1rem 0 0.4rem;\n}\n.rich-text-content h2 {\n font-size: 1.6rem;\n margin: 0.6rem 0 0.2rem;\n}\n.rich-text-content h3 {\n font-size: 1.4rem;\n margin: 0.4rem 0 0.2rem;\n}\n.rich-text-content h4 {\n font-size: 1.2rem;\n margin: 0.4rem 0 0.2rem;\n}\n.rich-text-content ul {\n padding-left: 1em;\n}\n.rich-text-content ul li {\n list-style: inside disc;\n}\n.rich-text-content ul li > ul > li {\n list-style: inside circle;\n}\n.rich-text-content ul li > ul > li > ul > li {\n list-style: inside square;\n}\n.rich-text-content ul li > p {\n display: inline;\n}\n.rich-text-content ol {\n padding-left: 1em;\n}\n.rich-text-content ol li {\n list-style: inside decimal;\n}\n.rich-text-content ol li > ol > li {\n list-style: inside lower-alpha;\n}\n.rich-text-content ol li > ol > li > ol > li {\n list-style: inside lower-roman;\n}\n.rich-text-content ol li > p {\n display: inline;\n}\n.rich-text-content > div > ul, .rich-text-content > div > ol {\n margin: 8px 0;\n}\n.rich-text-content em {\n font-style: italic;\n}\n.rich-text-content .table-wrapper {\n margin: 0.5rem 0;\n overflow-x: auto;\n display: flex;\n flex-direction: column;\n}\n.rich-text-content table {\n border-collapse: collapse;\n text-align: left;\n}\n.rich-text-content table > tr > th, .rich-text-content table > tr > td, .rich-text-content table > tbody > tr > th, .rich-text-content table > tbody > tr > td {\n border: 1px solid #ccc;\n box-sizing: border-box;\n padding: 6px 8px;\n vertical-align: top;\n}\n.rich-text-content table > tr > th > p, .rich-text-content table > tr > td > p, .rich-text-content table > tbody > tr > th > p, .rich-text-content table > tbody > tr > td > p {\n margin-bottom: 0;\n}\n.rich-text-content img {\n display: inline-block;\n height: auto;\n margin: 0.5rem 0;\n max-width: 100%;\n}\n.rich-text-content span[data-youtube-video] {\n padding-right: 0.5rem;\n display: inline-block;\n}\n.rich-text-content span[data-youtube-video] iframe {\n border: 0.5rem solid var(--black-contrast);\n outline: 0 solid transparent;\n}';
33990
33984
  const richTextContainerStyle = ':root {\n --body-bg: #ffffff;\n --gray-400: #A9A9A9;\n --primary: #5672EF;\n --icon-font-family: Material Symbols Outlined, monospace;\n}\n\n.bs-rich-text-editor {\n width: 100%;\n box-sizing: border-box;\n overflow: auto;\n padding: 8px;\n margin: 0 auto;\n background-color: var(--body-bg);\n align-self: center;\n box-shadow: 2px 0 8px rgba(0, 0, 0, 0.2);\n /* table */\n /* image */\n /* youtube */\n}\n.bs-rich-text-editor > .tiptap {\n width: 100%;\n flex-grow: 1;\n}\n.bs-rich-text-editor > .tiptap:focus {\n outline: 0;\n}\n.bs-rich-text-editor table {\n table-layout: fixed;\n}\n.bs-rich-text-editor table td,\n.bs-rich-text-editor table th {\n min-width: 1em;\n position: relative;\n}\n.bs-rich-text-editor table td > *,\n.bs-rich-text-editor table th > * {\n margin-bottom: 0;\n}\n.bs-rich-text-editor table th {\n font-weight: bold;\n text-align: left;\n}\n.bs-rich-text-editor table .selectedCell:after {\n background: var(--gray-400);\n opacity: 0.3;\n content: "";\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n pointer-events: none;\n position: absolute;\n z-index: 1;\n}\n.bs-rich-text-editor table .column-resize-handle {\n background-color: var(--primary);\n bottom: -2px;\n pointer-events: none;\n position: absolute;\n right: -2px;\n top: 0;\n width: 4px;\n z-index: 2;\n}\n.bs-rich-text-editor img, .bs-rich-text-editor video {\n user-select: auto;\n}\n.bs-rich-text-editor img.ProseMirror-selectednode, .bs-rich-text-editor video.ProseMirror-selectednode {\n outline: 3px solid var(--primary);\n position: relative;\n transition: outline 0.15s;\n z-index: 1;\n}\n.bs-rich-text-editor span[data-youtube-video] {\n position: relative;\n cursor: move;\n}\n.bs-rich-text-editor span[data-youtube-video] iframe {\n user-select: auto;\n}\n.bs-rich-text-editor span[data-youtube-video].ProseMirror-selectednode iframe {\n outline: 3px solid var(--primary);\n transition: outline 0.15s;\n}\n.bs-rich-text-editor span[data-youtube-video]::after {\n content: "menu";\n font-family: var(--icon-font-family);\n position: absolute;\n background-color: white;\n border-radius: 4px;\n padding: 4px;\n left: 8px;\n top: 8px;\n font-size: 20px;\n line-height: 1em;\n}';
33985
+ const TableCell = Node2.create({
33986
+ name: "tableCell",
33987
+ addOptions() {
33988
+ return {
33989
+ HTMLAttributes: {}
33990
+ };
33991
+ },
33992
+ content: "block+",
33993
+ addAttributes() {
33994
+ return {
33995
+ colspan: {
33996
+ default: 1
33997
+ },
33998
+ rowspan: {
33999
+ default: 1
34000
+ },
34001
+ colwidth: {
34002
+ default: null,
34003
+ parseHTML: (element) => {
34004
+ const colwidth = element.getAttribute("colwidth");
34005
+ const value = colwidth ? colwidth.split(",").map((width) => parseInt(width, 10)) : null;
34006
+ return value;
34007
+ }
34008
+ }
34009
+ };
34010
+ },
34011
+ tableRole: "cell",
34012
+ isolating: true,
34013
+ parseHTML() {
34014
+ return [
34015
+ { tag: "td" }
34016
+ ];
34017
+ },
34018
+ renderHTML({ HTMLAttributes }) {
34019
+ return ["td", mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];
34020
+ }
34021
+ });
34022
+ const RichTextTableCell = TableCell.extend({
34023
+ addAttributes() {
34024
+ var _a2;
34025
+ return {
34026
+ ...(_a2 = this.parent) == null ? void 0 : _a2.call(this),
34027
+ width: { parseHTML: parseHTMLStyle("width"), renderHTML: renderHTMLStyle("width") },
34028
+ colspan: {
34029
+ default: 1,
34030
+ parseHTML: (el) => {
34031
+ return Number(el.getAttribute("colspan")) || 1;
34032
+ },
34033
+ renderHTML: (attrs) => {
34034
+ if ((attrs.colspan || 1) > 1) return { colspan: attrs.colspan };
34035
+ }
34036
+ },
34037
+ rowspan: {
34038
+ default: 1,
34039
+ parseHTML: (el) => {
34040
+ return Number(el.getAttribute("rowspan")) || 1;
34041
+ },
34042
+ renderHTML: (attrs) => {
34043
+ if ((attrs.rowspan || 1) > 1) return { rowspan: attrs.rowspan };
34044
+ }
34045
+ }
34046
+ };
34047
+ }
34048
+ });
33991
34049
  const _hoisted_1$M = ["innerHTML"];
33992
34050
  const _hoisted_2$x = { class: "editor-container" };
33993
34051
  const WRAP_BEGIN = '<div class="rich-text-content">';
@@ -34041,14 +34099,14 @@ const _sfc_main$X = /* @__PURE__ */ defineComponent({
34041
34099
  inline: true
34042
34100
  }),
34043
34101
  RichTextTable.configure({
34044
- resizable: true,
34045
- lastColumnResizable: true,
34102
+ resizable: false,
34103
+ lastColumnResizable: false,
34046
34104
  allowTableNodeSelection: true,
34047
34105
  View: RichTextTableView
34048
34106
  }),
34049
34107
  TableHeader,
34050
34108
  TableRow,
34051
- TableCell,
34109
+ RichTextTableCell,
34052
34110
  RichTextYoutube.configure({
34053
34111
  inline: true,
34054
34112
  controls: false,
@@ -34168,10 +34226,19 @@ const _sfc_main$X = /* @__PURE__ */ defineComponent({
34168
34226
  const doc2 = iframeRef.value.contentWindow.document;
34169
34227
  const context = {
34170
34228
  iframeDocument: doc2,
34229
+ fontLinks: [
34230
+ "https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&display=block"
34231
+ ],
34171
34232
  editorStyles: [richTextContainerStyle],
34172
34233
  contentStyles: [richTextContentStyle]
34173
34234
  };
34174
34235
  emit("editorIframeReady", context);
34236
+ context.fontLinks.forEach((font) => {
34237
+ const link = doc2.createElement("link");
34238
+ link.setAttribute("href", font);
34239
+ link.setAttribute("rel", "stylesheet");
34240
+ doc2.head.appendChild(link);
34241
+ });
34175
34242
  const styles = [...context.editorStyles || [], ...context.contentStyles || []];
34176
34243
  styles.forEach((css2) => {
34177
34244
  const style2 = doc2.createElement("style");
@@ -34187,7 +34254,7 @@ const _sfc_main$X = /* @__PURE__ */ defineComponent({
34187
34254
  emit("maximized");
34188
34255
  if (!props.internalMaximized) {
34189
34256
  modal.openModal({
34190
- component: defineAsyncComponent(() => import("./BSRichTextMaximizedModal-BqzE5__U.js")),
34257
+ component: defineAsyncComponent(() => import("./BSRichTextMaximizedModal-bwfs_ETq.js")),
34191
34258
  bind: {
34192
34259
  modelValue: getEditorValue(),
34193
34260
  contentMaxWidth: props.contentMaxWidth,
@@ -34724,7 +34791,7 @@ const _sfc_main$V = /* @__PURE__ */ defineComponent({
34724
34791
  const modal = useModal();
34725
34792
  const enterYoutubeUrl = () => {
34726
34793
  modal.openModal({
34727
- component: defineAsyncComponent(() => import("./BSYoutubeInputModal-eRBqHjeW.js")),
34794
+ component: defineAsyncComponent(() => import("./BSYoutubeInputModal-gxqSatHw.js")),
34728
34795
  on: {
34729
34796
  "update:modelValue": (url) => {
34730
34797
  emit("update:modelValue", {
@@ -38046,7 +38113,7 @@ const _sfc_main$D = /* @__PURE__ */ defineComponent({
38046
38113
  const modal = useModal();
38047
38114
  const openSettingModal = () => {
38048
38115
  modal.openModal({
38049
- component: defineAsyncComponent(() => import("./BSGridColumnSettingModal-CVVenSnr.js")),
38116
+ component: defineAsyncComponent(() => import("./BSGridColumnSettingModal-CGOmNxYg.js")),
38050
38117
  bind: {
38051
38118
  columns: props.columns,
38052
38119
  columnSettings: props.columnSettings,
@@ -69779,22 +69846,22 @@ const localeNameProvider = (locale) => {
69779
69846
  const BLUESEA_VERSION = "5.0.0";
69780
69847
  export {
69781
69848
  _sfc_main$T as $,
69782
- _sfc_main$1z as A,
69849
+ BSLink as A,
69783
69850
  BSButton as B,
69784
- BSConsole as C,
69785
- BSLoadingIcon as D,
69786
- _sfc_main$1w as E,
69787
- _sfc_main$1v as F,
69788
- _sfc_main$1u as G,
69789
- _sfc_main$1t as H,
69790
- _sfc_main$1r as I,
69791
- _sfc_main$1q as J,
69792
- _sfc_main$1o as K,
69793
- _sfc_main$1m as L,
69794
- _sfc_main$1j as M,
69795
- _sfc_main$1h as N,
69796
- _sfc_main$1l as O,
69797
- _sfc_main$1k as P,
69851
+ _sfc_main$1z as C,
69852
+ BSConsole as D,
69853
+ BSLoadingIcon as E,
69854
+ _sfc_main$1w as F,
69855
+ _sfc_main$1v as G,
69856
+ _sfc_main$1u as H,
69857
+ _sfc_main$1t as I,
69858
+ _sfc_main$1r as J,
69859
+ _sfc_main$1q as K,
69860
+ _sfc_main$1o as L,
69861
+ _sfc_main$1m as M,
69862
+ _sfc_main$1j as N,
69863
+ _sfc_main$1h as O,
69864
+ _sfc_main$1l as P,
69798
69865
  _sfc_main$1g as Q,
69799
69866
  _sfc_main$1F as R,
69800
69867
  _sfc_main$1f as S,
@@ -69989,19 +70056,19 @@ export {
69989
70056
  _sfc_main$1i as i,
69990
70057
  vFocusOnLoad as j,
69991
70058
  componentUtil as k,
69992
- formValidator as l,
69993
- findImageNode as m,
70059
+ _sfc_main$1k as l,
70060
+ formValidator as m,
69994
70061
  notNull as n,
69995
- imageInfoNumberToPixel as o,
69996
- findYoutubeNode as p,
69997
- normalizeYoutubeInfoData as q,
69998
- findVideoNode as r,
69999
- videoInfoNumberToPixel as s,
70000
- BLUESEA_VERSION as t,
70062
+ findImageNode as o,
70063
+ imageInfoNumberToPixel as p,
70064
+ findYoutubeNode as q,
70065
+ normalizeYoutubeInfoData as r,
70066
+ findVideoNode as s,
70067
+ videoInfoNumberToPixel as t,
70001
70068
  useModalHandle as u,
70002
70069
  vT as v,
70003
- _sfc_main$1E as w,
70004
- _sfc_main$1C as x,
70070
+ BLUESEA_VERSION as w,
70071
+ _sfc_main$1E as x,
70005
70072
  youtubeInfoNumberToPixel as y,
70006
- BSLink as z
70073
+ _sfc_main$1C as z
70007
70074
  };
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.1",
4
+ "version": "5.0.0-beta.3",
5
5
  "description": "Ui Library for g1cloud BackOffice.",
6
6
  "type": "module",
7
7
  "engines": {
@@ -54,13 +54,13 @@
54
54
  "@vitest/coverage-v8": "^1.5.3",
55
55
  "@vue/test-utils": "^2.4.6",
56
56
  "jsdom": "^26.1.0",
57
+ "sass": "^1.86.3",
57
58
  "typescript": "^5.4.5",
58
59
  "vite": "^6.3.2",
59
60
  "vite-plugin-dts": "^3.9.0",
60
61
  "vitest": "^3.1.1",
61
62
  "vitest-canvas-mock": "^0.3.3",
62
- "vue-tsc": "^2.2.8",
63
- "sass": "^1.86.3"
63
+ "vue-tsc": "^2.2.8"
64
64
  },
65
65
  "peerDependencies": {
66
66
  "dayjs": "^1.11.11",
@@ -276,32 +276,36 @@
276
276
  .bs-checkbox-group,
277
277
  .bs-radio-button-group {
278
278
  &.modified {
279
- input::before {
280
- color: var(--purple) !important;
281
- }
279
+ .bs-checkbox:not(.disabled), .bs-radio-button:not(.disabled) {
280
+ input::before {
281
+ color: var(--purple) !important;
282
+ }
282
283
 
283
- input ~ label {
284
- color: var(--purple) !important;
284
+ input ~ label {
285
+ color: var(--purple) !important;
286
+ }
285
287
  }
286
288
  }
287
289
 
288
- &.disabled {
289
- & input::before {
290
- color: var(--gray-400) !important;
291
- }
290
+ &.error {
291
+ .bs-checkbox:not(.disabled), .bs-radio-button:not(.disabled) {
292
+ input::before {
293
+ color: var(--danger) !important;
294
+ }
292
295
 
293
- & input ~ label {
294
- color: var(--gray-400) !important;
296
+ input ~ label {
297
+ color: var(--danger) !important;
298
+ }
295
299
  }
296
300
  }
297
301
 
298
- &.error {
302
+ &.disabled {
299
303
  input::before {
300
- color: var(--danger) !important;
304
+ color: var(--gray-400) !important;
301
305
  }
302
306
 
303
307
  input ~ label {
304
- color: var(--danger) !important;
308
+ color: var(--gray-400) !important;
305
309
  }
306
310
  }
307
311
  }
@@ -7,6 +7,10 @@
7
7
  "key": "bs.addYoutubeUrl",
8
8
  "text": "Add YouTube URL"
9
9
  },
10
+ {
11
+ "key": "bs.align",
12
+ "text": "Align"
13
+ },
10
14
  {
11
15
  "key": "bs.am",
12
16
  "text": "AM"
@@ -35,6 +39,10 @@
35
39
  "key": "bs.clear",
36
40
  "text": "Clear"
37
41
  },
42
+ {
43
+ "key": "bs.clearAll",
44
+ "text": "Clear All"
45
+ },
38
46
  {
39
47
  "key": "bs.cleared",
40
48
  "text": "It has been cleared."
@@ -765,6 +773,10 @@
765
773
  "key": "bs.richtext.table",
766
774
  "text": "Table"
767
775
  },
776
+ {
777
+ "key": "bs.richtext.tableColumnInfo",
778
+ "text": "Column Info."
779
+ },
768
780
  {
769
781
  "key": "bs.richtext.tableProperties",
770
782
  "text": "Table Properties"
@@ -7,6 +7,10 @@
7
7
  "key": "bs.addYoutubeUrl",
8
8
  "text": "Ajouter une URL YouTube"
9
9
  },
10
+ {
11
+ "key": "bs.align",
12
+ "text": "Aligner"
13
+ },
10
14
  {
11
15
  "key": "bs.am",
12
16
  "text": "SUIS"
@@ -35,6 +39,10 @@
35
39
  "key": "bs.clear",
36
40
  "text": "Clair"
37
41
  },
42
+ {
43
+ "key": "bs.clearAll",
44
+ "text": "Tout effacer"
45
+ },
38
46
  {
39
47
  "key": "bs.cleared",
40
48
  "text": "Cela a été effacé."
@@ -765,6 +773,10 @@
765
773
  "key": "bs.richtext.table",
766
774
  "text": "Tableau"
767
775
  },
776
+ {
777
+ "key": "bs.richtext.tableColumnInfo",
778
+ "text": "Info. sur la colonne"
779
+ },
768
780
  {
769
781
  "key": "bs.richtext.tableProperties",
770
782
  "text": "Propriétés du tableau"
@@ -7,6 +7,10 @@
7
7
  "key": "bs.addYoutubeUrl",
8
8
  "text": "YouTube動画登録"
9
9
  },
10
+ {
11
+ "key": "bs.align",
12
+ "text": "並べ替え"
13
+ },
10
14
  {
11
15
  "key": "bs.am",
12
16
  "text": "午前"
@@ -35,6 +39,10 @@
35
39
  "key": "bs.clear",
36
40
  "text": "クリア"
37
41
  },
42
+ {
43
+ "key": "bs.clearAll",
44
+ "text": "全体初期化"
45
+ },
38
46
  {
39
47
  "key": "bs.cleared",
40
48
  "text": "初期化されました。"
@@ -765,6 +773,10 @@
765
773
  "key": "bs.richtext.table",
766
774
  "text": "テーブル"
767
775
  },
776
+ {
777
+ "key": "bs.richtext.tableColumnInfo",
778
+ "text": "コラム情報"
779
+ },
768
780
  {
769
781
  "key": "bs.richtext.tableProperties",
770
782
  "text": "テーブル属性"
@@ -7,6 +7,10 @@
7
7
  "key": "bs.addYoutubeUrl",
8
8
  "text": "YouTube 동영상 등록"
9
9
  },
10
+ {
11
+ "key": "bs.align",
12
+ "text": "정렬"
13
+ },
10
14
  {
11
15
  "key": "bs.am",
12
16
  "text": "오전"
@@ -35,6 +39,10 @@
35
39
  "key": "bs.clear",
36
40
  "text": "초기화"
37
41
  },
42
+ {
43
+ "key": "bs.clearAll",
44
+ "text": "전체 초기화"
45
+ },
38
46
  {
39
47
  "key": "bs.cleared",
40
48
  "text": "초기화 되었습니다."
@@ -765,6 +773,10 @@
765
773
  "key": "bs.richtext.table",
766
774
  "text": "테이블"
767
775
  },
776
+ {
777
+ "key": "bs.richtext.tableColumnInfo",
778
+ "text": "칼럼 정보"
779
+ },
768
780
  {
769
781
  "key": "bs.richtext.tableProperties",
770
782
  "text": "테이블 속성"