@bagelink/vue 1.15.413 → 1.15.419

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/dist/admin.css +1 -1
  2. package/dist/components/Avatar.vue.d.ts.map +1 -1
  3. package/dist/components/FloatingPanel.vue.d.ts +1 -0
  4. package/dist/components/FloatingPanel.vue.d.ts.map +1 -1
  5. package/dist/components/Loading.vue.d.ts.map +1 -1
  6. package/dist/components/form/inputs/ArrayInput.vue.d.ts.map +1 -1
  7. package/dist/components/form/inputs/RadioGroup.vue.d.ts +1 -0
  8. package/dist/components/form/inputs/RadioGroup.vue.d.ts.map +1 -1
  9. package/dist/components/form/inputs/RichText/index.vue.d.ts.map +1 -1
  10. package/dist/components/form/inputs/Upload/UploadInput.vue.d.ts.map +1 -1
  11. package/dist/components/form/inputs/Upload/useFileUpload.d.ts +1 -0
  12. package/dist/components/form/inputs/Upload/useFileUpload.d.ts.map +1 -1
  13. package/dist/composables/useSchemaField.d.ts.map +1 -1
  14. package/dist/core.css +1 -1
  15. package/dist/form-flow/form-flow.d.ts.map +1 -1
  16. package/dist/form-flow/schema-fields.d.ts +2 -0
  17. package/dist/form-flow/schema-fields.d.ts.map +1 -1
  18. package/dist/index.cjs +41 -41
  19. package/dist/index.css +1 -1
  20. package/dist/index.mjs +7862 -7805
  21. package/dist/ploni.css +1 -1
  22. package/dist/style.css +2 -2
  23. package/dist/types/BagelForm.d.ts +2 -0
  24. package/dist/types/BagelForm.d.ts.map +1 -1
  25. package/dist/utils/index.d.ts +15 -1
  26. package/dist/utils/index.d.ts.map +1 -1
  27. package/package.json +1 -1
  28. package/src/components/Avatar.vue +1 -1
  29. package/src/components/FloatingPanel.vue +19 -3
  30. package/src/components/Loading.vue +25 -62
  31. package/src/components/form/inputs/ArrayInput.vue +3 -10
  32. package/src/components/form/inputs/RadioGroup.vue +4 -3
  33. package/src/components/form/inputs/RichText/index.vue +54 -36
  34. package/src/components/form/inputs/Upload/UploadInput.vue +1 -0
  35. package/src/components/form/inputs/Upload/useFileUpload.ts +7 -0
  36. package/src/composables/useSchemaField.ts +19 -1
  37. package/src/form-flow/form-flow.ts +1 -0
  38. package/src/form-flow/schema-fields.ts +4 -0
  39. package/src/styles/fonts/Ploni.css +32 -0
  40. package/src/types/BagelForm.ts +2 -0
  41. package/src/utils/index.ts +48 -1
@@ -107,6 +107,8 @@ export interface UploadInputProps extends BagelInputShellProps {
107
107
  * (e.g. `{ imageURL, imageName, extension, altText }`); it is normalized internally.
108
108
  */
109
109
  modelValue?: string | string[] | UploadInputValueObject | (string | UploadInputValueObject)[];
110
+ /** Optional upload handler. When omitted, the shared file-storage uploader is used. */
111
+ upload?: (file: File) => Promise<string>;
110
112
  width?: string;
111
113
  height?: string | 'auto';
112
114
  dirPath?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"BagelForm.d.ts","sourceRoot":"","sources":["../../src/types/BagelForm.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BagelForm.d.ts","sourceRoot":"","sources":["../../src/types/BagelForm.ts"],"names":[],"mappings":"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"}
@@ -2,15 +2,29 @@ import { Attributes, BglFormSchemaT, Path } from '../types/BagelForm';
2
2
  export declare function debounce(fn: () => void, wait?: number): void;
3
3
  export declare function slugify(str: string): string;
4
4
  export declare function keyToLabel(key?: string): string | undefined;
5
+ /**
6
+ * Convert stored rich-text HTML to compact plain text for tables, labels, and
7
+ * other read-only summaries. Block elements are separated so paragraphs do not
8
+ * run together.
9
+ */
10
+ export declare function richTextToPlainText(value: string): string;
11
+ export declare function containsHtml(value: string): boolean;
5
12
  export declare function copyText(text: string, cb?: (msg: string) => void): Promise<void>;
6
13
  export declare function initials(...strArr: string[]): string;
14
+ export interface SanitizeHtmlOptions {
15
+ /**
16
+ * Remove inline presentation and layout attributes while preserving semantic
17
+ * markup such as paragraphs, lists, emphasis, and links.
18
+ */
19
+ resetFormatting?: boolean;
20
+ }
7
21
  /**
8
22
  * Strip script-capable content from an HTML string so it is safe for v-html.
9
23
  * Removes <script>/<style>/<iframe>/<object>/<embed> elements, on* event
10
24
  * handler attributes, and javascript: / data: URLs in href/src.
11
25
  * Allowlist-free by design — formatting tags (b, i, a, span…) pass through.
12
26
  */
13
- export declare function sanitizeHtml(html: string): string;
27
+ export declare function sanitizeHtml(html: string, options?: SanitizeHtmlOptions): string;
14
28
  export declare function useEscape(event: KeyboardEvent, closeModel: () => void): void;
15
29
  export declare function classify(fieldVal?: any, row?: any, ...classes: any[]): string;
16
30
  export declare function bindAttrs<T, P extends Path<T>>(attrs?: Attributes<T, P>, fieldVal?: any, row?: T): {
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA;AAK1E,wBAAgB,QAAQ,CAAC,EAAE,EAAE,MAAM,IAAI,EAAE,IAAI,GAAE,MAAY,QAO1D;AAED,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,UAMlC;AAED,wBAAgB,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAQ3D;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,iBAGtE;AAED,wBAAgB,QAAQ,CAAC,GAAG,MAAM,EAAE,MAAM,EAAE,UAG3C;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAyBjD;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,IAAI,QAIrE;AAED,wBAAgB,QAAQ,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,OAAO,EAAE,GAAG,EAAE,UAOpE;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,EAC7C,KAAK,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,EACxB,QAAQ,CAAC,EAAE,GAAG,EACd,GAAG,CAAC,EAAE,CAAC;;EAwBP;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,OAO9C;AAED,wBAAgB,SAAS,CAAC,QAAQ,CAAC,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,EAAE,OAAO,CAAC,EAAE,MAAM,OAG5E;AAED,eAAO,MAAM,MAAM,GAAI,YAAY,GAAG,YAA0C,CAAA;AAEhF,wBAAgB,iBAAiB,CAAC,CAAC,EAClC,IAAI,CAAC,EAAE,GAAG,EAAE,EACZ,OAAO,CAAC,EAAE,MAAM,EAAE,GAChB,cAAc,CAAC,CAAC,CAAC,CAoBnB;AAED,wBAAgB,KAAK,CAAC,EAAE,GAAE,MAAY,oBAErC;AAKD,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IAAE,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA2CxF;AAED;;;;;;;GAOG;AACH,wBAAsB,WAAW,CAAC,CAAC,GAAG,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,OAAgB,EAAE,QAAa,EAAE,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAStJ;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAatD;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,UAIvC;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,EAAE,aAAa,SAAO,GAAG,MAAM,GAAG,SAAS,CAG/G;AAED,YAAY,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AACjD,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,iBAAiB,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAE7G,YAAY,EAAE,kBAAkB,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AACvH,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AACxG,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAQpE,qEAAqE;AACrE,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEpD;AAED,wBAAgB,YAAY,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS,CA2BxE;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,YAAY,GAAE,GAAe,GAAG,GAAG,CAa1F;AAID,wBAAgB,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,CAAC,GAAG,SAAS,CAQzF;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,CAAC,EAAE,MAAM,QA6BpE;AAED,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAKrD,YAAY,EACX,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,EACjB,YAAY,EACZ,uBAAuB,EACvB,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,EAChB,aAAa,GACb,MAAM,QAAQ,CAAA;AACf,OAAO,EACN,CAAC,EACD,SAAS,EACT,QAAQ,EACR,GAAG,EACH,OAAO,EACP,UAAU,EACV,eAAe,EACf,cAAc,EACd,IAAI,EACJ,KAAK,EACL,MAAM,EACN,EAAE,EACF,MAAM,EACN,SAAS,EACT,GAAG,EACH,IAAI,GACJ,MAAM,QAAQ,CAAA;AACf,cAAc,SAAS,CAAA;AACvB,cAAc,UAAU,CAAA;AAExB,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAMxC,iGAAiG;AACjG,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,GAAG,CAAA;CAAE,GAAG,CAAC,CAAA;AAE7D,gFAAgF;AAChF,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG;IAAE,UAAU,EAAE,MAAM,IAAI,CAAA;CAAE,CAAA;AAE3G;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAChE,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,EAAE,GAAG;IAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAA;CAAE,CAAC,EACxE,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,GACjC,aAAa,CAAC,CAAC,CAAC,CA0BlB;AACD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@bagelink/vue",
3
3
  "type": "module",
4
- "version": "1.15.413",
4
+ "version": "1.15.419",
5
5
  "description": "Bagel core sdk packages",
6
6
  "author": {
7
7
  "name": "Bagel Studio",
@@ -61,7 +61,7 @@ const themed = computed(() => props.color
61
61
  >
62
62
  <Image v-if="src" :src="src" :alt="alt || name" />
63
63
  <Icon v-else-if="icon" :icon="icon" :size="resolvedSize / 40" />
64
- <p v-else :style="{ 'line-height': `${resolvedSize}px`, 'font-size': `calc(1.5rem * ${resolvedSize} / 50)` }">
64
+ <p v-else :style="{ 'line-height': '1', 'font-size': `calc(1.5rem * ${resolvedSize} / 50)` }" class="">
65
65
  {{ (fallback || initials(name || '')).toUpperCase() }}
66
66
  </p>
67
67
  </div>
@@ -22,12 +22,15 @@ const {
22
22
  launcherLabel = '',
23
23
  /** Show the floating FAB launcher. Set false to drive open state externally. */
24
24
  launcher = true,
25
+ /** Show the panel's controls row. Disable when slotted content owns its header. */
26
+ controls = true,
25
27
  /** Start open / controlled open state (v-model:open). */
26
28
  open = false,
27
29
  } = defineProps<{
28
30
  launcherIcon?: string
29
31
  launcherLabel?: string
30
32
  launcher?: boolean
33
+ controls?: boolean
31
34
  open?: boolean
32
35
  }>()
33
36
 
@@ -48,6 +51,7 @@ defineExpose({
48
51
  <!-- FAB launcher (hidden while open) -->
49
52
  <Btn
50
53
  v-if="launcher && !isOpen"
54
+ lg
51
55
  color="primary" round :icon="launcherIcon" :value="launcherLabel"
52
56
  class="floating-panel-fab fixed bottom-1-5 end-1-5 z-9 shadow"
53
57
  @click="setOpen(true)"
@@ -58,7 +62,7 @@ defineExpose({
58
62
  <Transition name="floating-panel">
59
63
  <div v-show="isOpen" class="floating-panel">
60
64
  <div class="floating-panel-box">
61
- <div class="floating-panel-controls flex align-items-center gap-025 p-025 border-bottom">
65
+ <div v-if="controls" class="floating-panel-controls flex align-items-center gap-025 p-025 border-bottom">
62
66
  <slot name="controls" :close="() => setOpen(false)">
63
67
  <Btn icon="remove" flat thin size="xs" class="ms-auto" @click="setOpen(false)" />
64
68
  </slot>
@@ -81,11 +85,23 @@ defineExpose({
81
85
  align-items: flex-end;
82
86
  pointer-events: none;
83
87
  }
88
+
89
+ .floating-panel-fab:hover {
90
+ transform: scale(1.08);
91
+ }
92
+ .floating-panel-fab:active {
93
+ transform: scale(0.94);
94
+ }
95
+ @media (prefers-reduced-motion: reduce) {
96
+ .floating-panel-fab {
97
+ transition: none;
98
+ }
99
+ }
84
100
  .floating-panel-box {
85
101
  position: relative;
86
102
  pointer-events: auto;
87
- width: min(700px, calc(100vw - 2rem));
88
- height: min(90vh, 800px);
103
+ width: min(520px, calc(100vw - 2rem));
104
+ height: min(90vh, 720px);
89
105
  margin: 1rem;
90
106
  border-radius: 12px;
91
107
  border: 1px solid var(--bgl-border-color, #e0e0e0);
@@ -55,9 +55,10 @@ const svgCircumference = computed(() => Math.PI * 2 * svgRadius.value)
55
55
  <!-- Ellipsis Theme -->
56
56
  <template v-if="theme === 'ellipsis'">
57
57
  <slot />
58
- <div class="lds-ellipsis" :style="{ '--size': computedSize }">
59
- <div v-for="n in 4" :key="n" :style="{ 'color': computedColor, '--size': computedSize }" />
60
- </div>
58
+ <div
59
+ class="lds-ellipsis"
60
+ :style="{ '--size': computedSize, '--animation-duration': animationDuration, color: computedColor }"
61
+ />
61
62
  </template>
62
63
 
63
64
  <!-- Ring Theme -->
@@ -198,75 +199,37 @@ const svgCircumference = computed(() => Math.PI * 2 * svgRadius.value)
198
199
  }
199
200
 
200
201
  /* Ellipsis Theme */
201
- .lds-ellipsis,
202
- .lds-ellipsis div {
203
- box-sizing: border-box;
204
- }
205
-
206
202
  .lds-ellipsis {
207
- display: inline-block;
208
- position: relative;
209
203
  width: var(--size);
210
- height: var(--size);
211
- }
212
-
213
- .lds-ellipsis div {
214
- position: absolute;
215
- top: calc(var(--size) / 2 - calc(var(--size) / 10));
216
- width: calc(var(--size) / 5);
217
- height: calc(var(--size) / 5);
218
- border-radius: 50%;
219
- background: currentColor;
220
- animation-timing-function: cubic-bezier(0, 1, 1, 0);
221
- }
222
-
223
- .lds-ellipsis div:nth-child(1) {
224
- left: calc(var(--size) / 10);
225
- animation: lds-ellipsis1 0.6s infinite;
226
- }
227
-
228
- .lds-ellipsis div:nth-child(2) {
229
- left: calc(var(--size) / 10);
230
- animation: lds-ellipsis2 0.6s infinite;
231
- }
232
-
233
- .lds-ellipsis div:nth-child(3) {
234
- left: calc(var(--size) / 2.5);
235
- animation: lds-ellipsis2 0.6s infinite;
236
- }
237
-
238
- .lds-ellipsis div:nth-child(4) {
239
- left: calc(var(--size) / 1.42);
240
- animation: lds-ellipsis3 0.6s infinite;
204
+ aspect-ratio: 2;
205
+ --dot: no-repeat radial-gradient(circle closest-side, currentColor 90%, transparent);
206
+ background:
207
+ var(--dot) 0% 50%,
208
+ var(--dot) 50% 50%,
209
+ var(--dot) 100% 50%;
210
+ background-size: calc(100% / 3) 50%;
211
+ animation: bgl-loading-dots var(--animation-duration) infinite linear;
212
+ direction: ltr;
241
213
  }
242
214
 
243
- @keyframes lds-ellipsis1 {
244
- 0% {
245
- transform: scale(0);
215
+ @keyframes bgl-loading-dots {
216
+ 20% {
217
+ background-position: 0% 0%, 50% 50%, 100% 50%;
246
218
  }
247
-
248
- 100% {
249
- transform: scale(1);
219
+ 40% {
220
+ background-position: 0% 100%, 50% 0%, 100% 50%;
250
221
  }
251
- }
252
-
253
- @keyframes lds-ellipsis3 {
254
- 0% {
255
- transform: scale(1);
222
+ 60% {
223
+ background-position: 0% 50%, 50% 100%, 100% 0%;
256
224
  }
257
-
258
- 100% {
259
- transform: scale(0);
225
+ 80% {
226
+ background-position: 0% 50%, 50% 50%, 100% 100%;
260
227
  }
261
228
  }
262
229
 
263
- @keyframes lds-ellipsis2 {
264
- 0% {
265
- transform: translate(0, 0);
266
- }
267
-
268
- 100% {
269
- transform: translate(calc(var(--size) / 3.33), 0);
230
+ @media (prefers-reduced-motion: reduce) {
231
+ .lds-ellipsis {
232
+ animation: none;
270
233
  }
271
234
  }
272
235
  </style>
@@ -3,7 +3,7 @@ import type { Ref, WritableComputedRef } from 'vue'
3
3
 
4
4
  import type { DraggableEvent } from '../../draggable/useDraggable'
5
5
 
6
- import { Btn, resolveI18n, useI18n, pathKeyToURL } from '@bagelink/vue'
6
+ import { Btn, resolveI18n, useI18n, pathKeyToURL, richTextToPlainText } from '@bagelink/vue'
7
7
  import { computed, ref, watch, useSlots, type VNode } from 'vue'
8
8
  import Draggable from '../../draggable/Draggable.vue'
9
9
  import type { BagelInputShellProps } from './bagelInputShell'
@@ -51,23 +51,16 @@ const itemLabelPrefix = computed(() => {
51
51
  const IDENTIFIER_FIELDS = ['title', 'name', 'label', 'displayName', 'display_name', 'heading', 'caption', 'text']
52
52
  const IMAGE_FIELDS = ['image', 'thumbnail', 'avatar', 'photo', 'picture', 'profilePic', 'profile_pic', 'icon', 'logo']
53
53
 
54
- /** Rich-text fields often store HTML; collapse to plain text for the collapsed row label. */
55
- function toPlainText(value: string): string {
56
- if (!value.includes('<') && !value.includes('&')) return value.trim()
57
- const doc = new DOMParser().parseFromString(value, 'text/html')
58
- return (doc.body.textContent || '').replace(/\s+/g, ' ').trim()
59
- }
60
-
61
54
  function getItemIdentifier(item: T): string | null {
62
55
  if (typeof item === 'string' && item.trim().length > 0) {
63
- const plain = toPlainText(item)
56
+ const plain = richTextToPlainText(item)
64
57
  return plain.length > 0 ? plain : null
65
58
  }
66
59
  if (item !== null && item !== undefined && typeof item === 'object') {
67
60
  for (const field of IDENTIFIER_FIELDS) {
68
61
  const val = (item as Record<string, unknown>)[field]
69
62
  if (typeof val === 'string' && val.trim().length > 0) {
70
- const plain = toPlainText(val)
63
+ const plain = richTextToPlainText(val)
71
64
  if (plain.length > 0) return plain
72
65
  }
73
66
  }
@@ -38,6 +38,7 @@ const props = withDefaults(
38
38
  invertedActive?: boolean
39
39
  align?: 'start' | 'center' | 'end' | 'top' | 'bottom'
40
40
  hideRadio?: boolean
41
+ hideLabelWhenImage?: boolean
41
42
  bgColor?: string
42
43
  activeBgColor?: string
43
44
  activeTextColor?: string
@@ -189,10 +190,10 @@ function handleChange() {
189
190
  <div class="flex w-100 gap-1 flex-wrap m_gap-05 m_gap-row-025"
190
191
  :class="{ 'txt-center justify-content-center mx-auto': textAlign === 'center', 'radio-option-content--centered-image': textAlign === 'center' && opt.imgSrc, 'txt-end justify-content-end': textAlign === 'right', 'txt-start justify-content-start': textAlign === 'left' }"
191
192
  :style="{ color: textColor }">
192
- <img v-if="opt.imgSrc" class="py-025 radius-05 m_w40 object-fit" height="40" width="40" :src="opt.imgSrc" :alt="opt.imgAlt || opt.label || ''">
193
+ <img v-if="opt.imgSrc" class="py-025 radius-05 m_w40 object-fit" height="40" width="40" :src="opt.imgSrc" :alt="(hideLabelWhenImage ? opt.label || opt.imgAlt : opt.imgAlt || opt.label) || ''">
193
194
  <Icon v-else-if="opt.icon" :icon="opt.icon" :size="1" />
194
- <div class="">
195
- <div v-if="opt.label" class="m-0 m_txt-14 line-height-14" v-html="sanitizeHtml(opt.label)" />
195
+ <div v-if="(opt.label && !(hideLabelWhenImage && opt.imgSrc)) || opt.subLabel">
196
+ <div v-if="opt.label && !(hideLabelWhenImage && opt.imgSrc)" class="m-0 m_txt-14 line-height-14" v-html="sanitizeHtml(opt.label)" />
196
197
  <p v-if="opt.subLabel" class="txt-gray txt-12 m-0 pt-025">{{ opt.subLabel }}</p>
197
198
  </div>
198
199
  <slot name="radioItem" v-bind="opt" />
@@ -5,6 +5,7 @@ import { CodeEditor, copyText, Btn, Dialog, BglVideo, Icon, Card, ColorInput, pa
5
5
  import { watch, onUnmounted, onBeforeUnmount, onMounted, ref, computed, useAttrs } from 'vue'
6
6
  import CheckInput from '../CheckInput.vue'
7
7
  import NumberInput from '../NumberInput.vue'
8
+ import SelectBtn from '../SelectBtn.vue'
8
9
  import SelectInput from '../SelectInput.vue'
9
10
  import TextInput from '../TextInput.vue'
10
11
  import UploadInput from '../Upload/UploadInput.vue'
@@ -3622,44 +3623,48 @@ const imgTransform = computed({
3622
3623
  <!-- Image Modal -->
3623
3624
  <Dialog
3624
3625
  :open="showImageModal" :title="pendingImageData?.existingImage ? 'Edit Image' : 'Insert Image'"
3625
- width="m" @update:open="showImageModal = $event"
3626
+ width="l" @update:open="showImageModal = $event"
3626
3627
  >
3627
- <UploadInput v-model="imgTransform" label="Image" type="image" @keydown.enter="submitImage" />
3628
- <TextInput
3629
- v-model="imageForm.src" label="Image URL" type="url" placeholder="https://example.com/image.jpg"
3630
- @keydown.enter="submitImage"
3631
- />
3632
- <TextInput v-model="imageForm.alt" label="Alt Text" placeholder="Describe the image" />
3633
- <div class="flex gap-1">
3634
- <TextInput
3635
- v-model="imageForm.width" label="Width" placeholder="100% or 500px or auto"
3636
- help="Examples: 100%, 500px, auto"
3637
- />
3638
- <TextInput
3639
- v-model="imageForm.height" label="Height" placeholder="auto or 300px"
3640
- help="Examples: auto, 300px"
3641
- />
3628
+ <div class="image-dialog-layout">
3629
+ <UploadInput v-model="imgTransform" label="Image" type="image" @keydown.enter="submitImage" />
3630
+ <div class="flex flex-column gap-05 min-w-0">
3631
+ <TextInput
3632
+ v-model="imageForm.src" label="Image URL" type="url" placeholder="https://example.com/image.jpg"
3633
+ @keydown.enter="submitImage"
3634
+ />
3635
+ <TextInput v-model="imageForm.alt" label="Alt Text" placeholder="Describe the image" />
3636
+ <div class="flex gap-1">
3637
+ <TextInput
3638
+ v-model="imageForm.width" label="Width" placeholder="100% or 500px or auto"
3639
+ help="Examples: 100%, 500px, auto"
3640
+ />
3641
+ <TextInput
3642
+ v-model="imageForm.height" label="Height" placeholder="auto or 300px"
3643
+ help="Examples: auto, 300px"
3644
+ />
3645
+ </div>
3646
+ <SelectBtn
3647
+ v-model="imageForm.align" label="Alignment" :options="[
3648
+ { value: 'full', label: 'Full width (default)', icon: 'width_full' },
3649
+ { value: 'start', label: 'Float to start (text wraps)', icon: 'align_horizontal_left' },
3650
+ { value: 'end', label: 'Float to end (text wraps)', icon: 'align_horizontal_right' },
3651
+ ]"
3652
+ icon-only
3653
+ />
3654
+ <TextInput v-model="imageForm.credit" label="Photo Credit" placeholder="Photographer name (optional)" />
3655
+ <TextInput
3656
+ v-model="imageForm.link" label="Link URL" type="url" placeholder="https://example.com (optional)"
3657
+ help="Make the image clickable by linking it to a URL"
3658
+ />
3659
+ <CheckInput
3660
+ v-if="imageForm.link" v-model="imageForm.linkNewTab" label="Open link in new tab"
3661
+ />
3662
+ <CheckInput
3663
+ v-model="imageForm.figcaption" label="Show alt text as caption"
3664
+ help="Photo credit will always be shown if provided"
3665
+ />
3666
+ </div>
3642
3667
  </div>
3643
- <SelectInput
3644
- v-model="imageForm.align" label="Alignment" :options="[
3645
- { value: 'full', label: 'Full width (default)' },
3646
- { value: 'start', label: 'Float to start (text wraps)' },
3647
- { value: 'end', label: 'Float to end (text wraps)' },
3648
- ]"
3649
- help="Full width fills the container. Start/End float the image so text flows alongside."
3650
- />
3651
- <TextInput v-model="imageForm.credit" label="Photo Credit" placeholder="Photographer name (optional)" />
3652
- <TextInput
3653
- v-model="imageForm.link" label="Link URL" type="url" placeholder="https://example.com (optional)"
3654
- help="Make the image clickable by linking it to a URL"
3655
- />
3656
- <CheckInput
3657
- v-if="imageForm.link" v-model="imageForm.linkNewTab" label="Open link in new tab"
3658
- />
3659
- <CheckInput
3660
- v-model="imageForm.figcaption" label="Show alt text as caption"
3661
- help="Photo credit will always be shown if provided"
3662
- />
3663
3668
  <template #footer>
3664
3669
  <div class="flex gap-05 w-100 ">
3665
3670
  <Btn value="Cancel" flat thin @click="showImageModal = false" />
@@ -4001,6 +4006,19 @@ display: flex;
4001
4006
  gap: 0.5rem;
4002
4007
  }
4003
4008
 
4009
+ .image-dialog-layout {
4010
+ display: grid;
4011
+ grid-template-columns: minmax(240px, 0.8fr) minmax(0, 1.2fr);
4012
+ gap: 1rem;
4013
+ align-items: start;
4014
+ }
4015
+
4016
+ @media (max-width: 910px) {
4017
+ .image-dialog-layout {
4018
+ grid-template-columns: 1fr;
4019
+ }
4020
+ }
4021
+
4004
4022
  .content-area,
4005
4023
  .preview-area {
4006
4024
  flex: 1;
@@ -33,6 +33,7 @@ const {
33
33
  accept: props.accept,
34
34
  capture: props.capture,
35
35
  namespace: props.id || 'upload',
36
+ upload: props.upload,
36
37
  onFileQueued: async () => {
37
38
  await flushQueue()
38
39
  updateModelValue()
@@ -10,6 +10,7 @@ interface UseFileUploadProps {
10
10
  capture?: boolean | 'user' | 'environment'
11
11
  disabled?: boolean
12
12
  namespace?: string
13
+ upload?: (file: File) => Promise<string>
13
14
  onFileQueued?: (files: QueueFile[]) => void
14
15
  onChange?: () => void
15
16
  }
@@ -109,6 +110,12 @@ export function useFileUpload(props: UseFileUploadProps = {}) {
109
110
  }
110
111
 
111
112
  try {
113
+ if (props.upload) {
114
+ const pathKey = await props.upload(file.file)
115
+ pk.value.push(pathKey)
116
+ uploadedPathKeys.push(pathKey)
117
+ continue
118
+ }
112
119
  const { data } = await files.upload(file.file, {
113
120
  onUploadProgress: (e: ProgressEvent) => {
114
121
  file.progress = (e.loaded / e.total) * 100 - 1
@@ -18,7 +18,9 @@ import {
18
18
  ColorInput,
19
19
  RangeInput,
20
20
  EmailInput,
21
- getNestedValue
21
+ containsHtml,
22
+ getNestedValue,
23
+ richTextToPlainText
22
24
  } from '@bagelink/vue'
23
25
  import { h, isVNode } from 'vue'
24
26
 
@@ -388,6 +390,22 @@ export function useSchemaField<T extends { [key: string]: any }>(optns: UseSchem
388
390
  ])
389
391
  }
390
392
 
393
+ if (!slotContent && mode === 'table' && typeof transformedValue === 'string') {
394
+ const plainText = richTextToPlainText(transformedValue)
395
+ if (containsHtml(transformedValue)) {
396
+ return h('div', { class: 'ellipsis-1', title: plainText }, plainText)
397
+ }
398
+ }
399
+
400
+ if (!slotContent && mode === 'table' && Component === RichText) {
401
+ const plainText = richTextToPlainText(String(transformedValue ?? ''))
402
+ return h(
403
+ 'div',
404
+ { class: 'ellipsis-1', title: plainText },
405
+ plainText
406
+ )
407
+ }
408
+
391
409
  return slotContent || h(Component as any, props, componentSlots)
392
410
  }
393
411
 
@@ -1259,6 +1259,7 @@ function applyDesignerConfig(config: Record<string, any>, prop: JSONSchemaProper
1259
1259
  if (p['x-radio-inline']) config.inline = true
1260
1260
  if (p['x-radio-thin']) config.thin = true
1261
1261
  if (p['x-radio-hide-radio']) config.hideRadio = true
1262
+ if (p['x-radio-hide-label-when-image']) config.hideLabelWhenImage = true
1262
1263
  set('align', 'x-radio-align')
1263
1264
  set('textAlign', 'x-radio-text-align')
1264
1265
  // Select
@@ -99,6 +99,7 @@ export interface FormField {
99
99
  rangeMulti?: boolean
100
100
  radioThin?: boolean
101
101
  radioHideRadio?: boolean
102
+ radioHideLabelWhenImage?: boolean
102
103
  radioAlign?: 'start' | 'center' | 'end'
103
104
  /** Lay radio options out horizontally (inline) instead of stacked. */
104
105
  radioInline?: boolean
@@ -165,6 +166,7 @@ export interface JSONSchemaProperty {
165
166
  'x-range-multi'?: boolean
166
167
  'x-radio-thin'?: boolean
167
168
  'x-radio-hide-radio'?: boolean
169
+ 'x-radio-hide-label-when-image'?: boolean
168
170
  'x-radio-align'?: 'start' | 'center' | 'end'
169
171
  'x-radio-inline'?: boolean
170
172
  'x-radio-size'?: 's' | 'm' | 'l'
@@ -293,6 +295,7 @@ export function schemaToFields(schema: JSONSchemaObject | undefined): FormField[
293
295
  rangeMulti: prop['x-range-multi'],
294
296
  radioThin: prop['x-radio-thin'],
295
297
  radioHideRadio: prop['x-radio-hide-radio'],
298
+ radioHideLabelWhenImage: prop['x-radio-hide-label-when-image'],
296
299
  radioAlign: prop['x-ui']?.radioAlign ?? prop['x-radio-align'],
297
300
  radioInline: prop['x-radio-inline'],
298
301
  radioSize: prop['x-radio-size'],
@@ -457,6 +460,7 @@ export function fieldsToSchema(
457
460
  if (field.rangeMulti === true) prop['x-range-multi'] = true
458
461
  if (field.radioThin === true) prop['x-radio-thin'] = true
459
462
  if (field.radioHideRadio === true) prop['x-radio-hide-radio'] = true
463
+ if (field.radioHideLabelWhenImage === true) prop['x-radio-hide-label-when-image'] = true
460
464
  if (field.radioAlign) prop['x-ui'] = { ...prop['x-ui'], radioAlign: field.radioAlign }
461
465
  if (field.radioInline === true) prop['x-radio-inline'] = true
462
466
  if (field.radioSize) prop['x-radio-size'] = field.radioSize