@g1cloud/bluesea 5.0.0-beta.7 → 5.0.0-beta.8

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 (26) hide show
  1. package/dist/{BSAlertModal-B3zqxyBI.js → BSAlertModal-C8PIj5h_.js} +1 -1
  2. package/dist/{BSGridColumnSettingModal-CD9mFu9P.js → BSGridColumnSettingModal-D9CI-F_e.js} +1 -1
  3. package/dist/{BSRichTextMaximizedModal-BP6jz2N7.js → BSRichTextMaximizedModal-DsSYqgSR.js} +1 -1
  4. package/dist/{BSYesNoModal-82FcvYh-.js → BSYesNoModal-CB_RIKt0.js} +1 -1
  5. package/dist/{BSYoutubeInputModal-CrtOzrD-.js → BSYoutubeInputModal-CwLcWtEI.js} +1 -1
  6. package/dist/{ImageInsertModal-DdYqZWc5.js → ImageInsertModal-lWQeIMu7.js} +2 -2
  7. package/dist/{ImageProperties.vue_vue_type_script_setup_true_lang-2wZT4GKQ.js → ImageProperties.vue_vue_type_script_setup_true_lang-DDj0Odaa.js} +1 -1
  8. package/dist/{ImagePropertiesModal-CQnEtdug.js → ImagePropertiesModal-C6RyT5B5.js} +2 -2
  9. package/dist/{LinkPropertiesModal-DiqsnQW6.js → LinkPropertiesModal-D5A3Gq2i.js} +1 -1
  10. package/dist/{TableInsertModal-CQP0Lv5V.js → TableInsertModal-B1F5T8qs.js} +1 -1
  11. package/dist/{TablePropertiesModal-BlPP_yM-.js → TablePropertiesModal-DUiHSjcT.js} +1 -1
  12. package/dist/{VideoInsertModal-kNMv3Gr0.js → VideoInsertModal-R0Bs5E2T.js} +2 -2
  13. package/dist/{VideoProperties.vue_vue_type_script_setup_true_lang-BIg6hg9n.js → VideoProperties.vue_vue_type_script_setup_true_lang-BCTNqg94.js} +1 -1
  14. package/dist/{VideoPropertiesModal-DTnfD1tS.js → VideoPropertiesModal-DQADTS-J.js} +2 -2
  15. package/dist/{YoutubeInsertModal-Br27gi-y.js → YoutubeInsertModal-R97l6ge3.js} +2 -2
  16. package/dist/{YoutubeProperties.vue_vue_type_script_setup_true_lang-BpbU20_i.js → YoutubeProperties.vue_vue_type_script_setup_true_lang-Ce9a5UDA.js} +1 -1
  17. package/dist/{YoutubePropertiesModal-BXCSIlF9.js → YoutubePropertiesModal-BbrU7l5m.js} +2 -2
  18. package/dist/bluesea.js +107 -105
  19. package/dist/bluesea.umd.cjs +91 -29
  20. package/dist/component/grid/DateFilterModel.d.ts +15 -0
  21. package/dist/component/grid/GridModel.d.ts +1 -0
  22. package/dist/component/input/BSDateRangePresets.vue.d.ts +2 -2
  23. package/dist/component/input/DateRangePresetModel.d.ts +2 -0
  24. package/dist/component/tree/TreeModel.d.ts +28 -0
  25. package/dist/{index-CpfyaKHy.js → index-DRs7QwNQ.js} +211 -149
  26. package/package.json +1 -1
@@ -4688,6 +4688,11 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
4688
4688
  });
4689
4689
  dayjs.extend(utc);
4690
4690
  dayjs.extend(timezone);
4691
+ const createDateRangeFromPreset = (value, timeZone) => {
4692
+ const from = value.from ? resolveMoment(value.from, true, timeZone) : void 0;
4693
+ const to = value.to ? resolveMoment(value.to, false, timeZone) : void 0;
4694
+ return { from: from == null ? void 0 : from.toISOString(), to: to == null ? void 0 : to.toISOString() };
4695
+ };
4691
4696
  const resolveMoment = (setting, from, timeZone, baseDate) => {
4692
4697
  switch (setting.type) {
4693
4698
  case "TODAY":
@@ -4954,25 +4959,20 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
4954
4959
  const emit = __emit;
4955
4960
  const actualTimeZone = vue.computed(() => props.timeZone || blueseaConfig.timeZone);
4956
4961
  const currentPreset = vue.ref();
4957
- const createDateRange = (value) => {
4958
- const from = value.from ? resolveMoment(value.from, true, actualTimeZone.value) : void 0;
4959
- const to = value.to ? resolveMoment(value.to, false, actualTimeZone.value) : void 0;
4960
- return { from: from == null ? void 0 : from.toISOString(), to: to == null ? void 0 : to.toISOString() };
4961
- };
4962
4962
  const presetSelected = (value) => {
4963
- const range = value ? createDateRange(value) : void 0;
4964
- emit("update:modelValue", range);
4963
+ const range = value ? createDateRangeFromPreset(value, actualTimeZone.value) : void 0;
4964
+ emit("update:modelValue", range, value);
4965
4965
  };
4966
- const findPreset = (range) => {
4966
+ const findPreset2 = (range) => {
4967
4967
  return props.presets.find((preset) => {
4968
- const presetValue = createDateRange(preset);
4968
+ const presetValue = createDateRangeFromPreset(preset, actualTimeZone.value);
4969
4969
  return (range == null ? void 0 : range.from) === presetValue.from && (range == null ? void 0 : range.to) === presetValue.to;
4970
4970
  });
4971
4971
  };
4972
4972
  vue.watch(
4973
4973
  () => props.modelValue,
4974
4974
  () => {
4975
- currentPreset.value = findPreset(props.modelValue);
4975
+ currentPreset.value = findPreset2(props.modelValue);
4976
4976
  },
4977
4977
  { immediate: true }
4978
4978
  );
@@ -6153,16 +6153,7 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
6153
6153
  },
6154
6154
  clickRemoveButton: () => this.removeSelectedItem(),
6155
6155
  expandAll: () => {
6156
- const allParents = this.getAllParents();
6157
- if (this.expandedRows.size === allParents.size) {
6158
- this.expandedRows.clear();
6159
- } else {
6160
- allParents.forEach((item) => {
6161
- const key = option.getItemKey(item);
6162
- if (key) this.expandedRows.add(key);
6163
- });
6164
- }
6165
- this.updateAllExpanded();
6156
+ this.expandAll(this.expandedRows.size !== this.getAllParents().size);
6166
6157
  }
6167
6158
  };
6168
6159
  }
@@ -6298,6 +6289,25 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
6298
6289
  }
6299
6290
  this.cleanUpExpandedRows(this.expandedRows, this.tree.data);
6300
6291
  }
6292
+ expandAll(expandOrDepth) {
6293
+ if (expandOrDepth === true) {
6294
+ const allParents = this.getAllParents();
6295
+ allParents.forEach((item) => {
6296
+ const key = this.option.getItemKey(item);
6297
+ if (key) this.expandedRows.add(key);
6298
+ });
6299
+ } else if (expandOrDepth === false) {
6300
+ this.expandedRows.clear();
6301
+ } else if (expandOrDepth > 1) {
6302
+ const parents = /* @__PURE__ */ new Set();
6303
+ this.collectParents(parents, this.tree.data, this.option.getChildren, expandOrDepth - 1);
6304
+ parents.forEach((item) => {
6305
+ const key = this.option.getItemKey(item);
6306
+ if (key) this.expandedRows.add(key);
6307
+ });
6308
+ }
6309
+ this.updateAllExpanded();
6310
+ }
6301
6311
  forceRemoveItems(items) {
6302
6312
  items.forEach((item) => {
6303
6313
  var _a2, _b;
@@ -6334,12 +6344,14 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
6334
6344
  }
6335
6345
  }
6336
6346
  }
6337
- collectParents(parents, list, childrenProvider) {
6347
+ collectParents(parents, list, childrenProvider, maxDepth) {
6338
6348
  for (const item of list) {
6339
6349
  const children = childrenProvider(item);
6340
6350
  if (children && children.length > 0) {
6341
6351
  parents.add(item);
6342
- this.collectParents(parents, children, childrenProvider);
6352
+ if (maxDepth === void 0 || maxDepth > 1) {
6353
+ this.collectParents(parents, children, childrenProvider, maxDepth ? maxDepth - 1 : void 0);
6354
+ }
6343
6355
  }
6344
6356
  }
6345
6357
  }
@@ -36198,6 +36210,7 @@ img.ProseMirror-separator {
36198
36210
  this.selectDeleteSupport.removeIfAddedRow = (row) => this.editableSupport.removeIfAddedRow(row);
36199
36211
  }
36200
36212
  setGridData(data) {
36213
+ GridHandlerEditableSupport.cleanUpData(data);
36201
36214
  super.setGridData(data);
36202
36215
  this.editableSupport.clearAddedRows();
36203
36216
  }
@@ -36284,6 +36297,11 @@ img.ProseMirror-separator {
36284
36297
  };
36285
36298
  controlEventListener.clickAdd = () => this.createAndAddNewRow();
36286
36299
  }
36300
+ static cleanUpData(data) {
36301
+ data == null ? void 0 : data.forEach((row) => {
36302
+ if (row && row[GRID_NEW_ROW_KEY]) delete row[GRID_NEW_ROW_KEY];
36303
+ });
36304
+ }
36287
36305
  getModifiedRows() {
36288
36306
  var _a2;
36289
36307
  const addedKeys = this.addedRows.map((row) => row[GRID_NEW_ROW_KEY]);
@@ -37805,6 +37823,35 @@ img.ProseMirror-separator {
37805
37823
  };
37806
37824
  }
37807
37825
  });
37826
+ const serializeMomentSetting = (setting) => {
37827
+ if (!setting) return "";
37828
+ const value = setting.value === void 0 ? "" : `:${setting.value}`;
37829
+ return `${setting.type}${value}`;
37830
+ };
37831
+ const convertDateRangePresetKey = (preset) => {
37832
+ return `${serializeMomentSetting(preset.from)}~${serializeMomentSetting(preset.to)}`;
37833
+ };
37834
+ const findPreset = (presetKey, candidatePresets) => {
37835
+ if (!presetKey) return void 0;
37836
+ return candidatePresets == null ? void 0 : candidatePresets.find((preset) => convertDateRangePresetKey(preset) === presetKey);
37837
+ };
37838
+ class BetweenDateFilterWithPreset extends BetweenDateFilter {
37839
+ constructor(name2, fromValue, toValue, preset) {
37840
+ super(name2, fromValue, toValue);
37841
+ __publicField(this, "presetKey");
37842
+ this.name = name2;
37843
+ this.fromValue = fromValue;
37844
+ this.toValue = toValue;
37845
+ this.presetKey = preset ? convertDateRangePresetKey(preset) : void 0;
37846
+ }
37847
+ // candidatePresets 중 presetKey 에 해당하는 preset 을 찾아, fromValue, toValue 를 설정한다.
37848
+ // preset 을 찾을 수 없으면 undefined 를 리턴한다.
37849
+ static createFromPresetKey(name2, presetKey, candidatePresets, timeZone) {
37850
+ const preset = findPreset(presetKey, candidatePresets);
37851
+ const range = preset ? createDateRangeFromPreset(preset, timeZone) : void 0;
37852
+ return range ? new BetweenDateFilterWithPreset(name2, range.from, range.to, preset) : void 0;
37853
+ }
37854
+ }
37808
37855
  const _hoisted_1$N = {
37809
37856
  key: 0,
37810
37857
  class: "date-filters .bs-layout-vertical mr-16"
@@ -37863,9 +37910,10 @@ img.ProseMirror-separator {
37863
37910
  if (propertyId) item.propertyId = propertyId;
37864
37911
  emitValue();
37865
37912
  };
37866
- const setDateFilterValue = (index, value) => {
37913
+ const setDateFilterValue = (index, value, preset) => {
37867
37914
  const item = dateFilterValues.value[index];
37868
37915
  item.value = value || {};
37916
+ item.preset = preset;
37869
37917
  emitValue();
37870
37918
  };
37871
37919
  const addDateFilter = () => {
@@ -37890,7 +37938,7 @@ img.ProseMirror-separator {
37890
37938
  };
37891
37939
  const emitValue = () => {
37892
37940
  var _a2;
37893
- const filters = dateFilterValues.value.map((item) => betweenDateFilter(item.propertyId, item.value.from, item.value.to));
37941
+ const filters = dateFilterValues.value.map((item) => new BetweenDateFilterWithPreset(item.propertyId, item.value.from, item.value.to, item.preset));
37894
37942
  const and = filters.length > 0 ? andFilter(filters) : void 0;
37895
37943
  if (((_a2 = props.modelValue) == null ? void 0 : _a2.toString()) !== (and == null ? void 0 : and.toString())) {
37896
37944
  emit("update:modelValue", and);
@@ -37957,10 +38005,11 @@ img.ProseMirror-separator {
37957
38005
  }, null, 8, ["display-format", "from-id", "model-value", "name-from", "name-to", "popup-display-format", "popup-end-year", "popup-start-year", "resolution", "time-zone", "to-id", "width", "onUpdate:modelValue"]),
37958
38006
  vue.createVNode(_sfc_main$1A, {
37959
38007
  modelValue: item.value,
37960
- "onUpdate:modelValue": [($event) => item.value = $event, ($event) => setDateFilterValue(index, $event)],
38008
+ "onUpdate:modelValue": [($event) => item.value = $event, (value, preset) => setDateFilterValue(index, value, preset)],
37961
38009
  presets: _ctx.presets,
38010
+ "time-zone": timeZoneOfFilterItem(item.propertyId),
37962
38011
  class: "ml-4"
37963
- }, null, 8, ["modelValue", "onUpdate:modelValue", "presets"])
38012
+ }, null, 8, ["modelValue", "onUpdate:modelValue", "presets", "time-zone"])
37964
38013
  ]);
37965
38014
  }), 128))
37966
38015
  ])) : vue.createCommentVNode("", true);
@@ -38016,12 +38065,23 @@ img.ProseMirror-separator {
38016
38065
  emitUpdateModelValue();
38017
38066
  emitSearch();
38018
38067
  };
38068
+ const findDateFilterTimeZone = (name2, dateFilter) => {
38069
+ var _a2;
38070
+ return ((_a2 = dateFilter == null ? void 0 : dateFilter.filterItems.find((f) => f.propertyId === name2)) == null ? void 0 : _a2.timeZone) || blueseaConfig.timeZone;
38071
+ };
38019
38072
  vue.watch(() => props.gridPreferenceDateFilterValues, () => {
38020
38073
  if (props.gridPreferenceDateFilterValues && props.gridPreferenceDateFilterValues.filters && props.gridPreferenceDateFilterValues.filters.length > 0) {
38021
38074
  const filters = props.gridPreferenceDateFilterValues.filters.map((filter) => {
38022
- const dateFilter = filter;
38023
- if (dateFilter.name && (dateFilter.fromValue || dateFilter.toValue)) {
38024
- return betweenDateFilter(dateFilter.name, dateFilter.fromValue, dateFilter.toValue);
38075
+ var _a2, _b;
38076
+ const f = filter;
38077
+ if (f.name && (f.fromValue || f.toValue)) {
38078
+ if (f.presetKey) {
38079
+ const presets = props.dateRangePresets || ((_a2 = blueseaConfig.componentConfig.gridLookup) == null ? void 0 : _a2.dateRangePresets) || [];
38080
+ const timeZone = findDateFilterTimeZone(f.name, (_b = props.config) == null ? void 0 : _b.dateFilter);
38081
+ return BetweenDateFilterWithPreset.createFromPresetKey(f.name, f.presetKey, presets, timeZone);
38082
+ } else {
38083
+ return new BetweenDateFilterWithPreset(f.name, f.fromValue, f.toValue);
38084
+ }
38025
38085
  }
38026
38086
  }).filter(notNull);
38027
38087
  if (filters.length > 0) {
@@ -72015,6 +72075,7 @@ img.ProseMirror-separator {
72015
72075
  exports2.BSYesNoGroup = _sfc_main$1x;
72016
72076
  exports2.BSYesNoSelect = _sfc_main$1V;
72017
72077
  exports2.BetweenDateFilter = BetweenDateFilter;
72078
+ exports2.BetweenDateFilterWithPreset = BetweenDateFilterWithPreset;
72018
72079
  exports2.BetweenFilter = BetweenFilter;
72019
72080
  exports2.DEFAULT_GRID_COLUMN_WIDTH = DEFAULT_GRID_COLUMN_WIDTH;
72020
72081
  exports2.DefaultBody = _sfc_main$h;
@@ -72061,6 +72122,7 @@ img.ProseMirror-separator {
72061
72122
  exports2.closeAlarm = closeAlarm;
72062
72123
  exports2.configureBluesea = configureBluesea;
72063
72124
  exports2.contextMenuPluginKey = contextMenuPluginKey;
72125
+ exports2.convertDateRangePresetKey = convertDateRangePresetKey;
72064
72126
  exports2.createContextMenuPlugin = createContextMenuPlugin;
72065
72127
  exports2.createDefaultFrameContext = createDefaultFrameContext;
72066
72128
  exports2.createInputGridHandler = createInputGridHandler;
@@ -1,4 +1,19 @@
1
+ import { BetweenDateFilter } from '../../model/FilterModel.ts';
2
+ import { Dayjs } from 'dayjs';
3
+ import { DateRangePreset } from '../input/DateRangePresetModel.ts';
4
+ import { TimeZone } from '../../model/CommonTypes.ts';
5
+
1
6
  export type DateRange = {
2
7
  from?: string;
3
8
  to?: string;
4
9
  };
10
+ export type DateRangePresetKey = string;
11
+ export declare const convertDateRangePresetKey: (preset: DateRangePreset) => DateRangePresetKey;
12
+ export declare class BetweenDateFilterWithPreset extends BetweenDateFilter {
13
+ readonly name: string;
14
+ readonly fromValue?: string | Date | Dayjs | undefined;
15
+ readonly toValue?: string | Date | Dayjs | undefined;
16
+ presetKey?: DateRangePresetKey;
17
+ constructor(name: string, fromValue?: string | Date | Dayjs | undefined, toValue?: string | Date | Dayjs | undefined, preset?: DateRangePreset);
18
+ static createFromPresetKey(name: string, presetKey: DateRangePresetKey, candidatePresets: DateRangePreset[], timeZone: TimeZone): BetweenDateFilterWithPreset | undefined;
19
+ }
@@ -341,6 +341,7 @@ export declare class GridHandlerEditableSupport<T extends GridRowData> {
341
341
  private listener?;
342
342
  addedRows: T[];
343
343
  constructor(grid: UnwrapNestedRefs<GridBinding<T>>, gridEventListener: GridEventListener<T>, controlEventListener: GridControlEventListener, getRowKey: KeyProvider<T>, newRowCreator?: (() => T | undefined) | undefined, addRowToLast?: boolean | undefined, listener?: ((eventType: 'rowAdded' | 'rowRemoved') => void) | undefined);
344
+ static cleanUpData<T extends GridRowData>(data: T[]): void;
344
345
  getModifiedRows(): T[];
345
346
  getAddedRows(): T[];
346
347
  clearAddedRows(): void;
@@ -8,7 +8,7 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
8
8
  }>, {
9
9
  presets: () => DateRangePreset[];
10
10
  }>>, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
11
- "update:modelValue": (value: DateRange | undefined) => void;
11
+ "update:modelValue": (value: DateRange | undefined, preset: DateRangePreset | undefined) => void;
12
12
  }, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<{
13
13
  modelValue?: DateRange | undefined;
14
14
  presets?: DateRangePreset[] | undefined;
@@ -16,7 +16,7 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
16
16
  }>, {
17
17
  presets: () => DateRangePreset[];
18
18
  }>>> & Readonly<{
19
- "onUpdate:modelValue"?: ((value: DateRange | undefined) => any) | undefined;
19
+ "onUpdate:modelValue"?: ((value: DateRange | undefined, preset: DateRangePreset | undefined) => any) | undefined;
20
20
  }>, {
21
21
  presets: DateRangePreset[];
22
22
  }, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
@@ -1,5 +1,6 @@
1
1
  import { MultiLangText, TimeZone } from '../../model/CommonTypes.ts';
2
2
  import { Dayjs } from 'dayjs';
3
+ import { DateRange } from '../grid/DateFilterModel.ts';
3
4
 
4
5
  export type MomentType = 'TODAY' | 'THIS_WEEK' | 'THIS_MONTH' | 'THIS_YEAR' | 'LAST_HOURS' | 'LAST_DAYS' | 'DAYS_AGO' | 'WEEKS_AGO' | 'MONTHS_AGO' | 'YEARS_AGO';
5
6
  export type MomentSetting = {
@@ -11,4 +12,5 @@ export type DateRangePreset = {
11
12
  from?: MomentSetting;
12
13
  to?: MomentSetting;
13
14
  };
15
+ export declare const createDateRangeFromPreset: (value: DateRangePreset, timeZone: TimeZone) => DateRange;
14
16
  export declare const resolveMoment: (setting: MomentSetting, from: boolean, timeZone: TimeZone, baseDate?: Dayjs) => Dayjs | undefined;
@@ -35,9 +35,28 @@ export interface TreeHandler<T> {
35
35
  treeEventListener: TreeEventListener<T>;
36
36
  control: UnwrapNestedRefs<TreeControlBinding<T>>;
37
37
  controlEventListener: TreeControlEventListener;
38
+ /**
39
+ * Tree 에 data 를 넣는다.
40
+ * @param data
41
+ * @param keepSelection true 이면 현재 선택된 항목이 유지된다.
42
+ * @param keepExpanded true 이면 현재 expanded 인 항목이 유지된다.
43
+ * @param waitTime 이 값이 0보다 크면 이 시간동안 tree 를 비웠다가 다시 채운다. refresh 효과를 위해 사용한다. millisecond 단위.
44
+ */
38
45
  setTreeData(data: T[], keepSelection?: boolean, keepExpanded?: boolean, waitTime?: number): Promise<void>;
46
+ /**
47
+ * 항목을 선택한다.
48
+ * @param item
49
+ */
39
50
  selectItem(item: T | T[] | undefined): void;
51
+ /**
52
+ * `item` 의 parent 를 리턴한다.
53
+ * @param item
54
+ */
40
55
  getParent(item: T | undefined): T | undefined;
56
+ /**
57
+ * `item` 을 교체한다. item 이 변경된 경우, 변경된 객체를 tree 에 다시 표시할 때 사용한다.
58
+ * @param newItem
59
+ */
41
60
  replaceCurrentItem(newItem: T): void;
42
61
  /**
43
62
  * Tree 이 모든 항목을 순회하며 visitor 함수를 호출한다. visitor 함수가
@@ -63,7 +82,16 @@ export interface TreeHandler<T> {
63
82
  * @param index 추가할 위치. 0 보다 작으면 제일 마지막에 추가한다. 디폴트는 -1.
64
83
  */
65
84
  addChildItem(parent: T, index: number): void;
85
+ /**
86
+ * `items` 를 삭제한다.
87
+ * @param items
88
+ */
66
89
  removeItems(items: T[]): void;
90
+ /**
91
+ * Tree 전체를 펼치거나 접는다.
92
+ * @param expandOrDepth true 이면 전체를 펼치고, false 이면 접는다. 숫자이면 해당 depth 까지 표시되도록 펼친다.
93
+ */
94
+ expandAll(expandOrDepth: boolean | number): void;
67
95
  }
68
96
  export type TreeBinding<T> = {
69
97
  data: T[];