@bagelink/vue 0.0.200 → 0.0.204

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 (57) hide show
  1. package/dist/components/Btn.vue.d.ts.map +1 -1
  2. package/dist/components/form/BglField.vue.d.ts +23 -0
  3. package/dist/components/form/BglField.vue.d.ts.map +1 -0
  4. package/dist/components/form/BglForm.vue.d.ts +36 -0
  5. package/dist/components/form/BglForm.vue.d.ts.map +1 -0
  6. package/dist/components/form/ItemRef.vue.d.ts +0 -1
  7. package/dist/components/form/ItemRef.vue.d.ts.map +1 -1
  8. package/dist/components/form/index.d.ts +2 -0
  9. package/dist/components/form/index.d.ts.map +1 -1
  10. package/dist/components/form/inputs/CheckInput.vue.d.ts +0 -1
  11. package/dist/components/form/inputs/CheckInput.vue.d.ts.map +1 -1
  12. package/dist/components/form/inputs/ColorPicker.vue.d.ts +0 -1
  13. package/dist/components/form/inputs/ColorPicker.vue.d.ts.map +1 -1
  14. package/dist/components/form/inputs/CurrencyInput.vue.d.ts +0 -1
  15. package/dist/components/form/inputs/CurrencyInput.vue.d.ts.map +1 -1
  16. package/dist/components/form/inputs/DateInput.vue.d.ts +0 -1
  17. package/dist/components/form/inputs/DateInput.vue.d.ts.map +1 -1
  18. package/dist/components/form/inputs/FileUpload.vue.d.ts +18 -0
  19. package/dist/components/form/inputs/FileUpload.vue.d.ts.map +1 -0
  20. package/dist/components/form/inputs/Password.vue.d.ts +0 -1
  21. package/dist/components/form/inputs/Password.vue.d.ts.map +1 -1
  22. package/dist/components/form/inputs/PlainText.vue.d.ts +0 -1
  23. package/dist/components/form/inputs/PlainText.vue.d.ts.map +1 -1
  24. package/dist/components/form/inputs/ReadOnlyInput.vue.d.ts +0 -1
  25. package/dist/components/form/inputs/ReadOnlyInput.vue.d.ts.map +1 -1
  26. package/dist/components/form/inputs/SelectField.vue.d.ts +4 -1
  27. package/dist/components/form/inputs/SelectField.vue.d.ts.map +1 -1
  28. package/dist/components/form/inputs/TextInput.vue.d.ts +13 -0
  29. package/dist/components/form/inputs/TextInput.vue.d.ts.map +1 -1
  30. package/dist/components/form/inputs/index.d.ts +1 -0
  31. package/dist/components/form/inputs/index.d.ts.map +1 -1
  32. package/dist/index.cjs +810 -579
  33. package/dist/index.mjs +810 -579
  34. package/dist/style.css +127 -67
  35. package/dist/types/BagelField.d.ts +1 -8
  36. package/dist/types/BagelField.d.ts.map +1 -1
  37. package/dist/types/BagelForm.d.ts +23 -0
  38. package/dist/types/BagelForm.d.ts.map +1 -0
  39. package/dist/types/index.d.ts +2 -2
  40. package/dist/types/index.d.ts.map +1 -1
  41. package/dist/utils/index.d.ts +2 -2
  42. package/dist/utils/index.d.ts.map +1 -1
  43. package/package.json +1 -1
  44. package/src/components/Btn.vue +7 -7
  45. package/src/components/form/BglField.vue +29 -0
  46. package/src/components/form/BglForm.vue +75 -0
  47. package/src/components/form/index.ts +2 -0
  48. package/src/components/form/inputs/FileUpload.vue +130 -0
  49. package/src/components/form/inputs/SelectField.vue +2 -0
  50. package/src/components/form/inputs/TextInput.vue +44 -8
  51. package/src/components/form/inputs/index.ts +1 -0
  52. package/src/types/BagelField.ts +1 -6
  53. package/src/types/BagelForm.ts +24 -0
  54. package/src/types/index.ts +11 -2
  55. package/src/utils/index.ts +10 -23
  56. package/dist/components/FileUploader.vue.d.ts +0 -60
  57. package/dist/components/FileUploader.vue.d.ts.map +0 -1
package/dist/style.css CHANGED
@@ -306,16 +306,16 @@
306
306
  }
307
307
  }
308
308
 
309
- .loading[data-v-718ff632] {
309
+ .loading[data-v-845b751e] {
310
310
  border: 1px solid var(--bgl-white);
311
311
  border-bottom: 2px solid var(--bgl-white);
312
- animation: spin-718ff632 1s linear infinite;
312
+ animation: spin-845b751e 1s linear infinite;
313
313
  border-radius: 100px;
314
314
  width: 1rem;
315
315
  height: 1rem;
316
316
  margin: auto;
317
317
  }
318
- @keyframes spin-718ff632 {
318
+ @keyframes spin-845b751e {
319
319
  0% {
320
320
  transform: rotate(0deg);
321
321
  }
@@ -323,7 +323,7 @@
323
323
  transform: rotate(360deg);
324
324
  }
325
325
  }
326
- .btn-icon[data-v-718ff632] {
326
+ .btn-icon[data-v-845b751e] {
327
327
  height: var(--btn-height);
328
328
  width: var(--btn-height);
329
329
  border-radius: 100%;
@@ -333,97 +333,97 @@
333
333
  flex-shrink: 0;
334
334
  transition: var(--bgl-transition);
335
335
  }
336
- .btn[data-v-718ff632] {
336
+ .btn[data-v-845b751e] {
337
337
  padding-left: var(--btn-padding);
338
338
  padding-right: var(--btn-padding);
339
339
  transition: var(--bgl-transition);
340
340
  text-decoration: none;
341
341
  }
342
- .btn[disabled="true"][data-v-718ff632] {
342
+ .btn[disabled="true"][data-v-845b751e] {
343
343
  opacity: 0.5;
344
344
  cursor: not-allowed;
345
345
  }
346
- .btn-flex[data-v-718ff632] {
346
+ .btn-flex[data-v-845b751e] {
347
347
  display: flex;
348
348
  align-items: center;
349
349
  gap: 0.5rem;
350
350
  justify-content: center;
351
351
  }
352
- .btn .icon-font[data-v-718ff632] {
352
+ .btn .icon-font[data-v-845b751e] {
353
353
  font-size: calc(var(--input-font-size) * 1.3);
354
354
  }
355
- .btn[data-v-718ff632],
356
- .btn-icon[data-v-718ff632] {
357
- background-color: var(--e0356e0a);
358
- color: var(--458dc816);
355
+ .btn[data-v-845b751e],
356
+ .btn-icon[data-v-845b751e] {
357
+ background-color: var(--0bd3bef7);
358
+ color: var(--1b1b6b12);
359
359
  }
360
- .btn[data-v-718ff632]:hover,
361
- .btn-icon[data-v-718ff632]:hover {
360
+ .btn[data-v-845b751e]:hover,
361
+ .btn-icon[data-v-845b751e]:hover {
362
362
  filter: var(--bgl-hover-filter);
363
363
  }
364
- .btn[data-v-718ff632]:active,
365
- .btn-icon[data-v-718ff632]:active {
364
+ .btn[data-v-845b751e]:active,
365
+ .btn-icon[data-v-845b751e]:active {
366
366
  filter: var(--bgl-active-filter);
367
367
  }
368
- .btn.flatBtn[data-v-718ff632] {
368
+ .btn.flatBtn[data-v-845b751e] {
369
369
  padding-left: var(--btn-padding);
370
370
  padding-right: var(--btn-padding);
371
371
  background: transparent;
372
372
  }
373
- .btn-icon.flatBtn[data-v-718ff632] {
373
+ .btn-icon.flatBtn[data-v-845b751e] {
374
374
  background: transparent;
375
375
  }
376
- .btn.flatBtn[data-v-718ff632]:hover,
377
- .btn-icon.flatBtn[data-v-718ff632]:hover {
376
+ .btn.flatBtn[data-v-845b751e]:hover,
377
+ .btn-icon.flatBtn[data-v-845b751e]:hover {
378
378
  filter: var(--bgl-active-filter);
379
379
  }
380
- .btn.flatBtn[data-v-718ff632]:active,
381
- .btn-icon.flatBtn[data-v-718ff632]:active {
380
+ .btn.flatBtn[data-v-845b751e]:active,
381
+ .btn-icon.flatBtn[data-v-845b751e]:active {
382
382
  background: var(--bgl-white);
383
383
  filter: var(--bgl-hover-filter);
384
384
  }
385
- .btn.flatBtn.red[data-v-718ff632],
386
- .btn-icon.flatBtn.red[data-v-718ff632] {
385
+ .btn.flatBtn.red[data-v-845b751e],
386
+ .btn-icon.flatBtn.red[data-v-845b751e] {
387
387
  color: var(--bgl-red);
388
388
  }
389
- .btn.flatBtn.light[data-v-718ff632],
390
- .btn-icon.flatBtn.light[data-v-718ff632] {
389
+ .btn.flatBtn.light[data-v-845b751e],
390
+ .btn-icon.flatBtn.light[data-v-845b751e] {
391
391
  color: var(--bgl-primary-tint);
392
392
  }
393
- .btn.flatBtn.black[data-v-718ff632],
394
- .btn-icon.flatBtn.black[data-v-718ff632] {
393
+ .btn.flatBtn.black[data-v-845b751e],
394
+ .btn-icon.flatBtn.black[data-v-845b751e] {
395
395
  color: var(--bgl-black);
396
396
  }
397
- .btn.flatBtn.gray[data-v-718ff632],
398
- .btn-icon.flatBtn.gray[data-v-718ff632] {
397
+ .btn.flatBtn.gray[data-v-845b751e],
398
+ .btn-icon.flatBtn.gray[data-v-845b751e] {
399
399
  color: var(--bgl-gray);
400
400
  }
401
- .btn.thin[data-v-718ff632] {
401
+ .btn.thin[data-v-845b751e] {
402
402
  padding-left: calc(var(--btn-padding) / 2);
403
403
  padding-right: calc(var(--btn-padding) / 2);
404
404
  }
405
- .btn.round[data-v-718ff632] {
405
+ .btn.round[data-v-845b751e] {
406
406
  border-radius: calc(var(--btn-border-radius) * 2);
407
407
  }
408
- .btn-icon.thin[data-v-718ff632] {
408
+ .btn-icon.thin[data-v-845b751e] {
409
409
  height: calc(var(--btn-height) / 1.5);
410
410
  width: calc(var(--btn-height) / 1.5);
411
411
  line-height: 1;
412
412
  }
413
- [dir="rtl"] .icon-font[data-v-718ff632] {
413
+ [dir="rtl"] .icon-font[data-v-845b751e] {
414
414
  transform: rotateY(180deg);
415
415
  }
416
- .btn-border[data-v-718ff632] {
417
- outline: 1px solid var(--e0356e0a);
418
- color: var(--e0356e0a);
416
+ .btn-border[data-v-845b751e] {
417
+ outline: 1px solid var(--0bd3bef7);
418
+ color: var(--0bd3bef7);
419
419
  background: transparent;
420
420
  }
421
- .btn-border[data-v-718ff632]:hover {
421
+ .btn-border[data-v-845b751e]:hover {
422
422
  color: var(--bgl-white);
423
- background: var(--e0356e0a);
423
+ background: var(--0bd3bef7);
424
424
  filter: brightness(100%);
425
425
  }
426
- .btn-border[data-v-718ff632]:active {
426
+ .btn-border[data-v-845b751e]:active {
427
427
  filter: brightness(80%);
428
428
  }
429
429
  .bg-dark {
@@ -1705,6 +1705,10 @@ input:checked + .slider[data-v-d0543d4b]:before {
1705
1705
  }
1706
1706
  }
1707
1707
 
1708
+ .del-top {
1709
+ transform: translateY(-2.6rem);
1710
+ }
1711
+
1708
1712
  .no-edit[data-v-0dacba34] {
1709
1713
  pointer-events: none;
1710
1714
  }
@@ -1940,11 +1944,11 @@ input[type='email'][data-v-ed81a514] {
1940
1944
  margin-bottom: 2px;
1941
1945
  }
1942
1946
 
1943
- .custom-select[data-v-028ea61b] {
1947
+ .custom-select[data-v-f2c5b9ca] {
1944
1948
  position: relative;
1945
1949
  font-size: var(--input-font-size);
1946
1950
  }
1947
- .custom-select .input[data-v-028ea61b] {
1951
+ .custom-select .input[data-v-f2c5b9ca] {
1948
1952
  width: 100%;
1949
1953
  cursor: pointer;
1950
1954
  background: var(--input-bg);
@@ -1960,7 +1964,7 @@ input[type='email'][data-v-ed81a514] {
1960
1964
  justify-content: center;
1961
1965
  margin-bottom: 2px;
1962
1966
  }
1963
- .custom-select .input[data-v-028ea61b]:after {
1967
+ .custom-select .input[data-v-f2c5b9ca]:after {
1964
1968
  content: 'keyboard_arrow_down';
1965
1969
  font-family: 'Material Symbols Outlined', serif;
1966
1970
  position: absolute;
@@ -1969,24 +1973,24 @@ input[type='email'][data-v-ed81a514] {
1969
1973
  right: calc(var(--input-height) / 4);
1970
1974
  height: 100%;
1971
1975
  }
1972
- [dir='rtl'] .custom-select .input[data-v-028ea61b]:after {
1976
+ [dir='rtl'] .custom-select .input[data-v-f2c5b9ca]:after {
1973
1977
  right: unset;
1974
1978
  left: calc(var(--input-font-size) / 2);
1975
1979
  }
1976
- [dir='rtl'] .custom-select-drop[data-v-028ea61b] {
1977
- inset-inline-end: var(--1c3856b2);
1980
+ [dir='rtl'] .custom-select-drop[data-v-f2c5b9ca] {
1981
+ inset-inline-end: var(--530a7ef0);
1978
1982
  inset-inline-start: unset;
1979
1983
  }
1980
- .custom-select-drop[data-v-028ea61b] {
1984
+ .custom-select-drop[data-v-f2c5b9ca] {
1981
1985
  position: fixed;
1982
1986
 
1983
1987
  cursor: pointer;
1984
1988
  font-size: 12px;
1985
- top: var(--62aaf5e4);
1986
- inset-inline-start: var(--1c3856b2);
1989
+ top: var(--7d0177a2);
1990
+ inset-inline-start: var(--530a7ef0);
1987
1991
  box-sizing: border-box;
1988
1992
  min-width: 220px;
1989
- width: var(--6b6f4c7b);
1993
+ width: var(--0ee22bfd);
1990
1994
  background: var(--bgl-white);
1991
1995
  box-shadow: 0 0 10px 0 var(--bgl-shadow);
1992
1996
  border-radius: 10px;
@@ -1997,23 +2001,23 @@ input[type='email'][data-v-ed81a514] {
1997
2001
  max-height: 0;
1998
2002
  /*transition: var(--bgl-transition);*/
1999
2003
  }
2000
- .open-select.custom-select-drop[data-v-028ea61b] {
2004
+ .open-select.custom-select-drop[data-v-f2c5b9ca] {
2001
2005
  opacity: 1;
2002
2006
  max-height: 150px;
2003
2007
  pointer-events: all;
2004
2008
  /*transition: var(--bgl-transition);*/
2005
2009
  }
2006
- .custom-select-drop>*[data-v-028ea61b] {
2010
+ .custom-select-drop>*[data-v-f2c5b9ca] {
2007
2011
  /*transition: var(--bgl-transition); */
2008
2012
  padding: 0.5rem 0.75rem;
2009
2013
  }
2010
- .custom-select-drop>*[data-v-028ea61b]:hover {
2014
+ .custom-select-drop>*[data-v-f2c5b9ca]:hover {
2011
2015
  background: var(--bgl-blue-light);
2012
2016
  }
2013
- .custom-select-drop>*[data-v-028ea61b]:active {
2017
+ .custom-select-drop>*[data-v-f2c5b9ca]:active {
2014
2018
  filter: var(--bgl-hover-filter);
2015
2019
  }
2016
- .bagel-input label[data-v-028ea61b] {
2020
+ .bagel-input label[data-v-f2c5b9ca] {
2017
2021
  margin-bottom: 0;
2018
2022
  }
2019
2023
 
@@ -2173,47 +2177,55 @@ input[type='email'][data-v-ed81a514] {
2173
2177
  /* width: auto; */
2174
2178
  }
2175
2179
 
2176
- .bagel-input input[disabled][data-v-1502ca60] {
2177
- background: none;
2180
+ .bagel-input textarea[data-v-9f24ba22]{
2181
+ min-height: unset;
2182
+ }
2183
+ .bagel-input.text-input textarea[data-v-9f24ba22]{
2184
+ resize: none;
2178
2185
  }
2179
- .bagel-input.toggleEdit[data-v-1502ca60]:hover {
2186
+ .code textarea[data-v-9f24ba22]{
2187
+ font-family: 'Inconsolata', monospace;
2188
+ background: var(--bgl-black) !important;
2189
+ color: var(--bgl-white) !important;
2190
+ }
2191
+ .bagel-input.toggleEdit[data-v-9f24ba22]:hover {
2180
2192
  background-color: var(--input-bg);
2181
2193
  }
2182
- .bagel-input.small[data-v-1502ca60] {
2194
+ .bagel-input.small[data-v-9f24ba22] {
2183
2195
  margin-bottom: 0;
2184
2196
  height: 30px;
2185
2197
  }
2186
- .toggleEditBtn[data-v-1502ca60] {
2198
+ .toggleEditBtn[data-v-9f24ba22] {
2187
2199
  position: absolute;
2188
2200
  right: -24px;
2189
2201
  top: 4;
2190
2202
  opacity: 0;
2191
2203
  }
2192
- .textInputIconWrap[data-v-1502ca60] {
2204
+ .textInputIconWrap[data-v-9f24ba22] {
2193
2205
  position: relative;
2194
2206
  }
2195
- .textInputIconWrap .icon-font[data-v-1502ca60] {
2207
+ .textInputIconWrap .icon-font[data-v-9f24ba22] {
2196
2208
  position: absolute;
2197
2209
  inset-inline-end: 0.7rem;
2198
2210
  bottom: 50%;
2199
2211
  line-height: 0;
2200
2212
  color: var(--bgl-gray);
2201
2213
  }
2202
- .txtInputIconStart .iconStart[data-v-1502ca60] {
2214
+ .txtInputIconStart .iconStart[data-v-9f24ba22] {
2203
2215
  position: absolute;
2204
2216
  inset-inline-start: 0.7rem;
2205
2217
  top: 50%;
2206
2218
  line-height: 0;
2207
2219
  color: var(--bgl-gray);
2208
2220
  }
2209
- .txtInputIconStart input[data-v-1502ca60] {
2221
+ .txtInputIconStart textarea[data-v-9f24ba22] {
2210
2222
  padding-inline-start: 2rem;
2211
2223
  }
2212
- .bagel-input:hover .toggleEditBtn[data-v-1502ca60],
2213
- .bagel-input.editMode .toggleEditBtn[data-v-1502ca60] {
2224
+ .bagel-input:hover .toggleEditBtn[data-v-9f24ba22],
2225
+ .bagel-input.editMode .toggleEditBtn[data-v-9f24ba22] {
2214
2226
  opacity: 1;
2215
2227
  }
2216
- .bagel-input.small input[data-v-1502ca60] {
2228
+ .bagel-input.small textarea[data-v-9f24ba22] {
2217
2229
  height: 30px;
2218
2230
  }
2219
2231
 
@@ -2370,6 +2382,54 @@ input[type='email'][data-v-ed81a514] {
2370
2382
  color: var(--bgl-white);
2371
2383
  }
2372
2384
 
2385
+ .bagel-input .fileUploadWrap[data-v-352399c0] {
2386
+ outline: 1px solid var(--border-color);
2387
+ border-radius: var(--input-border-radius);
2388
+ text-align: center;
2389
+ cursor: pointer;
2390
+ transition: var(--bgl-transition);
2391
+ position: relative;
2392
+ height: 132px;
2393
+ font-size: var(--input-font-size);
2394
+ }
2395
+ .previewName[data-v-352399c0]{
2396
+ padding: 0.5rem;
2397
+ text-align: start;
2398
+ color: var(--input-color);
2399
+ display: grid;
2400
+ grid-template-columns: 1fr 22px;
2401
+ align-items: center;
2402
+ }
2403
+ .previewName p[data-v-352399c0]{
2404
+ overflow: hidden;
2405
+ text-overflow: ellipsis;
2406
+ white-space: nowrap;
2407
+ }
2408
+ .imagePreviewWrap[data-v-352399c0]{
2409
+ background: var(--input-bg);
2410
+ border-radius: var(--input-border-radius);
2411
+ height: 90px;
2412
+ padding: 5px;
2413
+ }
2414
+ img.preview[data-v-352399c0] {
2415
+ height: 80px;
2416
+ border-radius: var(--input-border-radius);
2417
+ object-fit: contain;
2418
+ }
2419
+ .fileUploadWrap.dragover[data-v-352399c0], .fileUploadWrap[data-v-352399c0]:hover{
2420
+ box-shadow: inset 0 0 10px #00000012;
2421
+ }
2422
+ .bagel-input .fileUploadWrap.fileDropZone[data-v-352399c0]{
2423
+ background: var(--input-bg);
2424
+ display: flex;
2425
+ align-items: center;
2426
+ justify-content: center;
2427
+ color:var(--bgl-gray);
2428
+ }
2429
+ .bagel-input .fileUploadWrap.fileDropZone[data-v-352399c0]:after {
2430
+ content: "Drop files here or click to upload";
2431
+ }
2432
+
2373
2433
  .chart-line {
2374
2434
  width: 100%;
2375
2435
  height: 300px;
@@ -29,12 +29,5 @@ export interface NestedBagelForm extends BaseBagelField {
29
29
  inputType: 'BagelForm';
30
30
  fields: NestedBagelFormFields;
31
31
  }
32
- export interface SelectBagelField extends BaseBagelField {
33
- inputType: 'SelectField';
34
- options: string | {
35
- label: string;
36
- value: string | number;
37
- }[];
38
- }
39
- export type BagelField = BaseBagelField | SelectBagelField | NestedBagelForm;
32
+ export type BagelField = BaseBagelField | NestedBagelForm;
40
33
  //# sourceMappingURL=BagelField.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"BagelField.d.ts","sourceRoot":"","sources":["../../src/types/BagelField.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC,CAAC;IACvC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,EACN,SAAS,GACT,aAAa,GACb,WAAW,GACX,YAAY,GACZ,eAAe,GACf,WAAW,GACX,eAAe,GACf,YAAY,GACZ,aAAa,GACb,WAAW,GACX,UAAU,GACV,UAAU,GACV,SAAS,GACT,aAAa,GACb,SAAS,GACT,WAAW,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG;IAEtC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AACF,MAAM,MAAM,qBAAqB,GAAG,WAAW,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAEhF,MAAM,WAAW,eAAgB,SAAQ,cAAc;IACtD,SAAS,EAAE,WAAW,CAAC;IACvB,MAAM,EAAE,qBAAqB,CAAC;CAC9B;AAED,MAAM,WAAW,gBAAiB,SAAQ,cAAc;IACvD,SAAS,EAAE,aAAa,CAAC;IACzB,OAAO,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,EAAE,CAAC;CAC9D;AAED,MAAM,MAAM,UAAU,GAAG,cAAc,GAAG,gBAAgB,GAAG,eAAe,CAAC"}
1
+ {"version":3,"file":"BagelField.d.ts","sourceRoot":"","sources":["../../src/types/BagelField.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC,CAAC;IACvC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,EACN,SAAS,GACT,aAAa,GACb,WAAW,GACX,YAAY,GACZ,eAAe,GACf,WAAW,GACX,eAAe,GACf,YAAY,GACZ,aAAa,GACb,WAAW,GACX,UAAU,GACV,UAAU,GACV,SAAS,GACT,aAAa,GACb,SAAS,GACT,WAAW,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG;IAEtC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AACF,MAAM,MAAM,qBAAqB,GAAG,WAAW,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAEhF,MAAM,WAAW,eAAgB,SAAQ,cAAc;IACtD,SAAS,EAAE,WAAW,CAAC;IACvB,MAAM,EAAE,qBAAqB,CAAC;CAC9B;AAED,MAAM,MAAM,UAAU,GAAG,cAAc,GAAG,eAAe,CAAC"}
@@ -0,0 +1,23 @@
1
+ export type AttributeValue = string | number | boolean | null | undefined | Record<string, any>;
2
+ export type AttributeFn<T = Record<string, any>> = (field: any, row: T) => AttributeValue;
3
+ export interface Attributes<T = any> {
4
+ [key: string]: AttributeValue | AttributeFn<T>;
5
+ }
6
+ export type Field<T = Record<string, any>> = {
7
+ $el?: any;
8
+ id?: string;
9
+ label?: string;
10
+ placeholder?: string;
11
+ children?: Field<T>[];
12
+ attrs?: Attributes<T>;
13
+ required?: boolean;
14
+ };
15
+ export interface SelectBagelField {
16
+ inputType: 'SelectField';
17
+ options: string | {
18
+ label: string;
19
+ value: string | number;
20
+ }[];
21
+ }
22
+ export type BglFormSchemaT<T = Record<string, any>> = Field<T>[];
23
+ //# sourceMappingURL=BagelForm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BagelForm.d.ts","sourceRoot":"","sources":["../../src/types/BagelForm.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAEhG,MAAM,MAAM,WAAW,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,KAAK,cAAc,CAAC;AAE1F,MAAM,WAAW,UAAU,CAAC,CAAC,GAAG,GAAG;IACjC,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;CAC/C;AAED,MAAM,MAAM,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI;IAC3C,GAAG,CAAC,EAAE,GAAG,CAAC;IACV,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IACtB,KAAK,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAA;AAED,MAAM,WAAW,gBAAgB;IAChC,SAAS,EAAE,aAAa,CAAC;IACzB,OAAO,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,EAAE,CAAC;CAC9D;AAED,MAAM,MAAM,cAAc,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC"}
@@ -2,7 +2,7 @@ export type { MaterialIcons } from './materialIcons';
2
2
  export type { BankDetailsInterface, NewPerson, Person } from './Person';
3
3
  export type { Tables, TableToTypeMapping } from '@bagelink/sdk';
4
4
  export type { StorageFile } from './file';
5
- export * from './BagelField';
6
5
  export * from './BtnOptions';
7
- export type ThemeType = 'light' | 'red' | 'gray' | 'gray-light' | 'black' | 'green' | 'blue';
6
+ export * from './BagelForm';
7
+ export type ThemeType = 'light' | 'red' | 'gray' | 'gray-light' | 'black' | 'green' | 'primary' | 'blue';
8
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,YAAY,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AACxE,YAAY,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAChE,YAAY,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAC1C,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAE7B,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,KAAK,GAAG,MAAM,GAAG,YAAY,GAAG,OAAO,GAAG,OAAO,GAAE,MAAM,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,YAAY,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AACxE,YAAY,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAChE,YAAY,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAE1C,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAE5B,MAAM,MAAM,SAAS,GACpB,OAAO,GACL,KAAK,GACL,MAAM,GACN,YAAY,GACZ,OAAO,GACP,OAAO,GACP,SAAS,GACT,MAAM,CAAA"}
@@ -1,10 +1,10 @@
1
- import type { BagelField } from '..';
1
+ import { Attributes } from '../types';
2
2
  export declare const debounce: (fn: () => void, delay?: number) => void;
3
3
  export declare const keyToLabel: (key: string) => string;
4
- export declare function computeFields(modelValue: Record<string, any>): BagelField[];
5
4
  export declare const copyText: (text: string, cb?: ((msg: string) => void) | undefined) => Promise<void>;
6
5
  export declare const useFormkit: () => unknown;
7
6
  export declare const initials: (...strArr: string[]) => string;
8
7
  export declare function useEscape(event: KeyboardEvent, closeModel: () => void): void;
8
+ export declare function bindAttrs<T = Record<string, any>>(attrs: Attributes, fieldVal: any, row: T): any;
9
9
  export { formatString } from './strings';
10
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAGhD,eAAO,MAAM,QAAQ,OAAQ,MAAM,IAAI,yBAGtC,CAAC;AAEF,eAAO,MAAM,UAAU,QAAS,MAAM,WAG3B,CAAC;AAEZ,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,UAAU,EAAE,CAmB3E;AAED,eAAO,MAAM,QAAQ,SACd,MAAM,cAED,MAAM,KAAK,IAAI,+BAI1B,CAAC;AAEF,eAAO,MAAM,UAAU,eAGtB,CAAC;AAEF,eAAO,MAAM,QAAQ,cAAe,MAAM,EAAE,WAAiD,CAAC;AAE9F,wBAAgB,SAAS,CAAC,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,IAAI,QAIrE;AAED,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAGtC,eAAO,MAAM,QAAQ,OAAQ,MAAM,IAAI,yBAGtC,CAAC;AAEF,eAAO,MAAM,UAAU,QAAS,MAAM,WAG3B,CAAC;AAEZ,eAAO,MAAM,QAAQ,SACd,MAAM,cAED,MAAM,KAAK,IAAI,+BAI1B,CAAC;AAEF,eAAO,MAAM,UAAU,eAGtB,CAAC;AAEF,eAAO,MAAM,QAAQ,cAAe,MAAM,EAAE,WAAiD,CAAC;AAE9F,wBAAgB,SAAS,CAAC,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,IAAI,QAIrE;AAED,wBAAgB,SAAS,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,OAO1F;AAED,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@bagelink/vue",
3
3
  "type": "module",
4
- "version": "0.0.200",
4
+ "version": "0.0.204",
5
5
  "description": "Bagel core sdk packages",
6
6
  "author": {
7
7
  "name": "Neveh Allon",
@@ -74,15 +74,15 @@ const props = withDefaults(
74
74
  );
75
75
 
76
76
  const computedTheme = $computed(
77
- () => (props?.color || props?.theme)
77
+ () => (props?.color || props?.theme),
78
78
  );
79
79
 
80
80
  const computedDefaultColors = $computed(
81
81
  () => ({
82
82
  backgroundColor: 'var(--bgl-primary)',
83
- color: props.flat ? 'var(--bgl-black)' : 'var(--bgl-white)'
84
- })
85
- )
83
+ color: props.flat ? 'var(--bgl-black)' : 'var(--bgl-white)',
84
+ }),
85
+ );
86
86
 
87
87
  function getThemeColors(theme: Partial<typeof computedDefaultColors>): typeof computedDefaultColors {
88
88
  return ({
@@ -91,17 +91,18 @@ function getThemeColors(theme: Partial<typeof computedDefaultColors>): typeof co
91
91
  color: props.flat
92
92
  ? theme.backgroundColor as string
93
93
  : theme.color as string,
94
- })
94
+ });
95
95
  }
96
96
 
97
97
  const themes: { [key in ThemeType]: typeof computedDefaultColors } = {
98
98
  red: getThemeColors({ backgroundColor: 'var(--bgl-red)' }),
99
99
  black: getThemeColors({ backgroundColor: 'var(--bgl-black)' }),
100
100
  green: getThemeColors({ backgroundColor: 'var(--bgl-green)', color: 'var(--bgl-white)' }),
101
- blue: getThemeColors({ backgroundColor: 'var(--bgl-blue)', color: 'var(--bgl-white)' }),
101
+ primary: getThemeColors({ backgroundColor: 'var(--bgl-primary)', color: 'var(--bgl-white)' }),
102
102
  gray: getThemeColors({ backgroundColor: 'var(--bgl-gray-light)', color: 'var(--bgl-black)' }),
103
103
  light: getThemeColors({ backgroundColor: 'var(--bgl-primary-light)', color: 'var(--bgl-primary)' }),
104
104
  'gray-light': getThemeColors({ backgroundColor: 'var(--bgl-gray-light)', color: 'var(--bgl-gray)' }),
105
+ blue: getThemeColors({}),
105
106
  };
106
107
 
107
108
  const cumputedTextColor = $computed(
@@ -184,7 +185,6 @@ const computedBackgroundColor = $computed(
184
185
  filter: var(--bgl-active-filter);
185
186
  }
186
187
 
187
-
188
188
  .btn.flatBtn {
189
189
  padding-left: var(--btn-padding);
190
190
  padding-right: var(--btn-padding);
@@ -0,0 +1,29 @@
1
+ <template>
2
+ <component
3
+ :required="field.required"
4
+ v-bind="bindAttrs(field?.attrs||{}, props.modelValue[field.id || ''], props.modelValue,)"
5
+ :is="field.$el || 'div'"
6
+ :label="field.label"
7
+ :placeholder="field.placeholder || field.label"
8
+ :modelValue="props.modelValue[field.id || '']"
9
+ @update:modelValue="($event:any)=>emits('update:modelValue', $event)"
10
+ >
11
+ <BglField
12
+ :modelValue="modelValue"
13
+ @update:modelValue="($event:any)=>emits('update:modelValue', $event)"
14
+ v-for="(child,ii) in field.children" :key="child.id||ii"
15
+ :field="child"
16
+ />
17
+ </component>
18
+ </template>
19
+
20
+ <script lang="ts" setup>
21
+ import { type Field, bindAttrs } from '@bagelink/vue';
22
+
23
+ const props = defineProps<{
24
+ modelValue: Record<string, any>;
25
+ field: Field
26
+ }>();
27
+
28
+ const emits = defineEmits(['update:modelValue']);
29
+ </script>
@@ -0,0 +1,75 @@
1
+ <template>
2
+ <form @submit.prevent="runSubmit">
3
+ <BglField
4
+ v-for="(field, i) in schema" :key="field.id || `${i }p`" :field="field" :modelValue="data"
5
+ @update:modelValue="($event: any) => field.id ? data[field.id] = $event : ''"
6
+ />
7
+ <Btn
8
+ class="del-top" v-if="modelValue?.id && onDelete" @click="runDelete" value="Delete" flat icon="delete"
9
+ color="red" thin
10
+ />
11
+ <Btn v-if="!$slots.submit && onSubmit" value="Submit" type="submit" thin />
12
+ <div v-else>
13
+ <slot name="submit"/>
14
+ </div>
15
+ </form>
16
+ </template>
17
+
18
+ <script lang="ts" setup>
19
+ import { watch } from 'vue';
20
+ import { Btn, useModal, BglField } from '@bagelink/vue';
21
+ import { type BglFormSchemaT } from '@bagelink/vue';
22
+
23
+ const { showModal } = useModal();
24
+
25
+ const props = defineProps<{
26
+ modelValue?: any;
27
+ schema: BglFormSchemaT;
28
+ onDelete?: ((id: string) => void);
29
+ onSubmit?: ((data: any) => void);
30
+ }>();
31
+
32
+ const emits = defineEmits(['update:modelValue', 'submit']);
33
+ const handleEmit = (val: any) => emits('update:modelValue', val);
34
+ let data = $ref({
35
+ ...props.modelValue,
36
+ });
37
+ const runSubmit = () => {
38
+ emits('submit', data);
39
+ clearForm();
40
+ };
41
+
42
+ const clearForm = () => data = {};
43
+
44
+ const i18nT = (val: string) => val;
45
+
46
+ watch(
47
+ () => data,
48
+ () => handleEmit,
49
+ { immediate: true },
50
+ );
51
+
52
+ const runDelete = () => {
53
+ showModal(
54
+ {
55
+ class: 'small-modal',
56
+ title: i18nT('Are you sure?'),
57
+ actions: [
58
+ {
59
+ value: 'Confirm',
60
+ color: 'red',
61
+ onClick: () => props.onDelete?.(data.id),
62
+ },
63
+ { value: 'Cancel', color: 'gray' },
64
+ ],
65
+ },
66
+ { default: i18nT('form.deleteMessage') },
67
+ );
68
+ };
69
+ </script>
70
+
71
+ <style>
72
+ .del-top {
73
+ transform: translateY(-2.6rem);
74
+ }
75
+ </style>
@@ -1,4 +1,6 @@
1
1
  export { default as ItemRef } from './ItemRef.vue';
2
2
  export { default as MaterialIcon } from './MaterialIcon.vue';
3
3
  export { default as PlainInputField } from './PlainInputField.vue';
4
+ export { default as BglForm } from './BglForm.vue';
5
+ export { default as BglField } from './BglField.vue';
4
6
  export * from './inputs';