@flexkit/studio 0.0.28 → 0.0.29

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 (61) hide show
  1. package/dist/asset-TS7J5GA5.js +2 -0
  2. package/dist/{asset-REAMGMQL.js.map → asset-TS7J5GA5.js.map} +1 -1
  3. package/dist/chunk-73RMWG53.js +2 -0
  4. package/dist/{chunk-X3S7TRCM.js.map → chunk-73RMWG53.js.map} +1 -1
  5. package/dist/chunk-7MSX5T2Z.js +2 -0
  6. package/dist/chunk-7MSX5T2Z.js.map +1 -0
  7. package/dist/chunk-DWK4NNLB.js +2 -0
  8. package/dist/chunk-DWK4NNLB.js.map +1 -0
  9. package/dist/chunk-FVFRTCEB.js +2 -0
  10. package/dist/chunk-FVFRTCEB.js.map +1 -0
  11. package/dist/chunk-HAQICAOQ.js +2 -0
  12. package/dist/chunk-HAQICAOQ.js.map +1 -0
  13. package/dist/chunk-IXO2LU47.js +2 -0
  14. package/dist/{chunk-TBCSVE5L.js.map → chunk-IXO2LU47.js.map} +1 -1
  15. package/dist/{chunk-NNRD7YZU.js → chunk-LL2Z4TD3.js} +2 -2
  16. package/dist/{chunk-NNRD7YZU.js.map → chunk-LL2Z4TD3.js.map} +1 -1
  17. package/dist/chunk-N52AF6GE.js +2 -0
  18. package/dist/chunk-N52AF6GE.js.map +1 -0
  19. package/dist/chunk-WXMCINGZ.js +2 -0
  20. package/dist/{chunk-27Y2SQ67.js.map → chunk-WXMCINGZ.js.map} +1 -1
  21. package/dist/chunk-YA4ACPM5.js +2 -0
  22. package/dist/{chunk-KR7CLPY2.js.map → chunk-YA4ACPM5.js.map} +1 -1
  23. package/dist/index.css +117 -41
  24. package/dist/index.d.ts +39 -4
  25. package/dist/index.js +183 -181
  26. package/dist/index.js.map +1 -1
  27. package/dist/{search-YRDOJUQO.js → search-UFFZBRQV.js} +2 -2
  28. package/dist/{search-YRDOJUQO.js.map → search-UFFZBRQV.js.map} +1 -1
  29. package/dist/switch-AFZGXSR3.js +2 -0
  30. package/dist/{switch-KVO3JRNX.js.map → switch-AFZGXSR3.js.map} +1 -1
  31. package/dist/text-2RL2L5FT.js +2 -0
  32. package/dist/{text-ODG7ABSW.js.map → text-2RL2L5FT.js.map} +1 -1
  33. package/dist/textarea-2A4TLWZS.js +2 -0
  34. package/dist/{textarea-M4YPSJEC.js.map → textarea-2A4TLWZS.js.map} +1 -1
  35. package/dist/{types.d-DiQPwK_q.d.ts → types.d-6y0oZ2Hh.d.ts} +33 -1
  36. package/dist/ui.d.ts +16 -4
  37. package/dist/ui.js +1 -1
  38. package/dist/ui.js.map +1 -1
  39. package/dist/user-nav-4JKIFZLB.js +2 -0
  40. package/dist/user-nav-4JKIFZLB.js.map +1 -0
  41. package/package.json +3 -1
  42. package/dist/asset-REAMGMQL.js +0 -2
  43. package/dist/chunk-27Y2SQ67.js +0 -2
  44. package/dist/chunk-AALMEPYG.js +0 -2
  45. package/dist/chunk-AALMEPYG.js.map +0 -1
  46. package/dist/chunk-CWHDJ7Q4.js +0 -2
  47. package/dist/chunk-CWHDJ7Q4.js.map +0 -1
  48. package/dist/chunk-KR7CLPY2.js +0 -2
  49. package/dist/chunk-M5AH5ERI.js +0 -2
  50. package/dist/chunk-M5AH5ERI.js.map +0 -1
  51. package/dist/chunk-QXCD5JR4.js +0 -2
  52. package/dist/chunk-QXCD5JR4.js.map +0 -1
  53. package/dist/chunk-TBCSVE5L.js +0 -2
  54. package/dist/chunk-X3S7TRCM.js +0 -2
  55. package/dist/chunk-ZSJAPCIZ.js +0 -2
  56. package/dist/chunk-ZSJAPCIZ.js.map +0 -1
  57. package/dist/switch-KVO3JRNX.js +0 -2
  58. package/dist/text-ODG7ABSW.js +0 -2
  59. package/dist/textarea-M4YPSJEC.js +0 -2
  60. package/dist/user-nav-QYO4X7CQ.js +0 -2
  61. package/dist/user-nav-QYO4X7CQ.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/form/fields/textarea.tsx"],"names":["Textarea","control","fieldSchema","setValue","name","label","isEditable","options","handleInput","event","previousValue","handleCheckbox","checked","value","jsx","FormField","field","jsxs","FormItem","FormLabel","FormDescription","FormControl","DefaultValueSwitch","FormMessage"],"mappings":"mLAOO,SAASA,EAAS,CAAE,OAAA,CAAAC,EAAS,WAAA,CAAAC,CAAAA,CAAa,SAAAC,CAAS,CAAA,CAA6C,CACrG,GAAM,CAAE,KAAAC,CAAAA,CAAM,KAAA,CAAAC,CAAAA,CAAO,UAAA,CAAAC,IAAY,OAAA,CAAAC,CAAQ,EAAIL,CAAAA,CAE7C,SAASM,IACPC,CAAAA,CACAC,CAAAA,CACM,CACNP,CAAAA,CAASC,CAAAA,CAAM,CACb,GAAGM,CAAAA,CACH,MAAOD,CAAAA,CAAM,aAAA,CAAc,KAC7B,CAAC,EACH,CAEA,SAASE,IAAeC,CAAAA,CAAkBC,CAAAA,CAAyC,CACjFV,CAAAA,CAASC,CAAAA,CAAM,CACb,GAAGS,CAAAA,CACH,SAAUD,CACZ,CAAC,EACH,CAEA,OACEE,IAACC,CAAAA,CAAA,CACC,QAASd,CAAAA,CACT,IAAA,CAAMG,EACN,MAAA,CAAQ,CAAC,CAAE,KAAA,CAAAY,GAAM,IACfC,IAAAA,CAACC,CAAAA,CAAA,CACC,QAAA,CAAA,CAAAD,IAAAA,CAAC,OAAI,SAAA,CAAU,SAAA,CACb,UAAAA,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,4BAAA,CACb,QAAA,CAAA,CAAAH,IAACK,CAAAA,CAAA,CAAW,QAAA,CAAAd,CAAAA,CAAM,EACjBE,CAAAA,EAAS,OAAA,CAAUO,IAACM,CAAAA,CAAA,CAAiB,SAAAb,CAAAA,CAAQ,OAAA,CAAQ,EAAqB,IAAA,CAAA,CAC7E,CAAA,CACAO,IAAC,KAAA,CAAA,CAAI,SAAA,CAAU,mCAEf,CAAA,CAAA,CACF,CAAA,CACAA,IAACO,CAAAA,CAAA,CACC,QAAA,CAAAP,GAAAA,CAACd,EAAA,CACC,SAAA,CAAW,+BACT,CAACgB,GAAAA,CAAM,OAAO,KAAA,EAASA,GAAAA,CAAM,MAAM,KAAA,GAAU,SAAA,CAAY,UAAY,EACvE,CAAA,CAAA,CACA,SAAUV,GAAAA,GAAe,KAAA,EAASU,IAAM,KAAA,EAAO,QAAA,CAC9C,GAAGA,GAAAA,CACJ,SAAWP,CAAAA,EAAU,CACnBD,IAAYC,CAAAA,CAAOO,GAAAA,CAAM,KAAK,EAChC,CAAA,CACA,MAAQA,GAAAA,CAAM,KAAA,EAAO,OAAoB,EAAA,CAC3C,CAAA,CACF,EACAF,GAAAA,CAACQ,CAAAA,CAAA,CACC,OAAA,CAASN,GAAAA,CAAM,OAAO,QAAA,EAAY,KAAA,CAClC,SAAWJ,CAAAA,EAAY,CACrBD,IAAeC,CAAAA,CAASI,GAAAA,CAAM,KAAK,EACrC,CAAA,CACA,MAAOA,GAAAA,CAAM,KAAA,EAAO,MACtB,CAAA,CACAF,GAAAA,CAACS,EAAA,EAAY,CAAA,CAAA,CACf,EAEJ,CAEJ","file":"chunk-KR7CLPY2.js","sourcesContent":["import type { JSX } from 'react';\nimport type { FormFieldValue } from '../../graphql-client/types';\nimport { FormControl, FormDescription, FormField, FormLabel, FormMessage, FormItem } from '../../ui/primitives/form';\nimport { Textarea as TextareaPrimitive } from '../../ui/primitives/textarea';\nimport type { FormFieldParams } from '../types';\nimport { DefaultValueSwitch } from './default-value-switch';\n\nexport function Textarea({ control, fieldSchema, setValue }: FormFieldParams<'textarea'>): JSX.Element {\n const { name, label, isEditable, options } = fieldSchema;\n\n function handleInput(\n event: React.ChangeEvent<HTMLTextAreaElement | HTMLInputElement>,\n previousValue: FormFieldValue | undefined\n ): void {\n setValue(name, {\n ...previousValue,\n value: event.currentTarget.value,\n });\n }\n\n function handleCheckbox(checked: boolean, value: FormFieldValue | undefined): void {\n setValue(name, {\n ...value,\n disabled: checked,\n });\n }\n\n return (\n <FormField\n control={control}\n name={name}\n render={({ field }: { field: { value?: FormFieldValue } }) => (\n <FormItem>\n <div className=\"fk:flex\">\n <div className=\"fk:full-w fk:grid fk:gap-2\">\n <FormLabel>{label}</FormLabel>\n {options?.comment ? <FormDescription>{options.comment}</FormDescription> : null}\n </div>\n <div className=\"fk:h-full fk:self-end fk:ml-auto\">\n {/* TODO: this should be a slot that can receive user-defined components and system components like Presence and AI Writting Tools */}\n </div>\n </div>\n <FormControl>\n <TextareaPrimitive\n className={`fk:w-full fk:mt-[0.1875rem] ${\n !field.value?.scope || field.value.scope === 'default' ? 'fk:mb-3' : ''\n }`}\n disabled={isEditable === false || field.value?.disabled}\n {...field}\n onChange={(event) => {\n handleInput(event, field.value);\n }}\n value={(field.value?.value as string) || ''}\n />\n </FormControl>\n <DefaultValueSwitch\n checked={field.value?.disabled ?? false}\n onChange={(checked) => {\n handleCheckbox(checked, field.value);\n }}\n scope={field.value?.scope}\n />\n <FormMessage />\n </FormItem>\n )}\n />\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/form/fields/textarea.tsx"],"names":["Textarea","control","fieldSchema","setValue","name","label","isEditable","options","handleInput","event","previousValue","handleCheckbox","checked","value","jsx","FormField","field","jsxs","FormItem","FormLabel","FormDescription","FormControl","DefaultValueSwitch","FormMessage"],"mappings":"0LAOO,SAASA,EAAS,CAAE,OAAA,CAAAC,EAAS,WAAA,CAAAC,CAAAA,CAAa,SAAAC,CAAS,CAAA,CAA6C,CACrG,GAAM,CAAE,KAAAC,CAAAA,CAAM,KAAA,CAAAC,CAAAA,CAAO,UAAA,CAAAC,EAAY,OAAA,CAAAC,CAAQ,EAAIL,CAAAA,CAE7C,SAASM,IACPC,CAAAA,CACAC,CAAAA,CACM,CACNP,CAAAA,CAASC,CAAAA,CAAM,CACb,GAAGM,CAAAA,CACH,MAAOD,CAAAA,CAAM,aAAA,CAAc,KAC7B,CAAC,EACH,CAEA,SAASE,IAAeC,CAAAA,CAAkBC,CAAAA,CAAyC,CACjFV,CAAAA,CAASC,CAAAA,CAAM,CACb,GAAGS,CAAAA,CACH,SAAUD,CACZ,CAAC,EACH,CAEA,OACEE,IAACC,CAAAA,CAAA,CACC,QAASd,CAAAA,CACT,IAAA,CAAMG,EACN,MAAA,CAAQ,CAAC,CAAE,KAAA,CAAAY,GAAM,IACfC,IAAAA,CAACC,CAAAA,CAAA,CACC,QAAA,CAAA,CAAAD,IAAAA,CAAC,OAAI,SAAA,CAAU,SAAA,CACb,UAAAA,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,4BAAA,CACb,QAAA,CAAA,CAAAH,IAACK,CAAAA,CAAA,CAAW,QAAA,CAAAd,CAAAA,CAAM,EACjBE,CAAAA,EAAS,OAAA,CAAUO,IAACM,CAAAA,CAAA,CAAiB,SAAAb,CAAAA,CAAQ,OAAA,CAAQ,EAAqB,IAAA,CAAA,CAC7E,CAAA,CACAO,IAAC,KAAA,CAAA,CAAI,SAAA,CAAU,mCAEf,CAAA,CAAA,CACF,CAAA,CACAA,IAACO,CAAAA,CAAA,CACC,QAAA,CAAAP,GAAAA,CAACd,EAAA,CACC,SAAA,CAAW,+BACT,CAACgB,GAAAA,CAAM,OAAO,KAAA,EAASA,GAAAA,CAAM,MAAM,KAAA,GAAU,SAAA,CAAY,UAAY,EACvE,CAAA,CAAA,CACA,SAAUV,CAAAA,GAAe,KAAA,EAASU,IAAM,KAAA,EAAO,QAAA,CAC9C,GAAGA,GAAAA,CACJ,SAAWP,CAAAA,EAAU,CACnBD,IAAYC,CAAAA,CAAOO,GAAAA,CAAM,KAAK,EAChC,CAAA,CACA,MAAQA,GAAAA,CAAM,KAAA,EAAO,OAAoB,EAAA,CAC3C,CAAA,CACF,EACAF,GAAAA,CAACQ,GAAAA,CAAA,CACC,OAAA,CAASN,GAAAA,CAAM,OAAO,QAAA,EAAY,KAAA,CAClC,SAAWJ,CAAAA,EAAY,CACrBD,IAAeC,CAAAA,CAASI,GAAAA,CAAM,KAAK,EACrC,CAAA,CACA,MAAOA,GAAAA,CAAM,KAAA,EAAO,MACtB,CAAA,CACAF,GAAAA,CAACS,EAAA,EAAY,CAAA,CAAA,CACf,EAEJ,CAEJ","file":"chunk-YA4ACPM5.js","sourcesContent":["import type { JSX } from 'react';\nimport type { FormFieldValue } from '../../graphql-client/types';\nimport { FormControl, FormDescription, FormField, FormLabel, FormMessage, FormItem } from '../../ui/primitives/form';\nimport { Textarea as TextareaPrimitive } from '../../ui/primitives/textarea';\nimport type { FormFieldParams } from '../types';\nimport { DefaultValueSwitch } from './default-value-switch';\n\nexport function Textarea({ control, fieldSchema, setValue }: FormFieldParams<'textarea'>): JSX.Element {\n const { name, label, isEditable, options } = fieldSchema;\n\n function handleInput(\n event: React.ChangeEvent<HTMLTextAreaElement | HTMLInputElement>,\n previousValue: FormFieldValue | undefined\n ): void {\n setValue(name, {\n ...previousValue,\n value: event.currentTarget.value,\n });\n }\n\n function handleCheckbox(checked: boolean, value: FormFieldValue | undefined): void {\n setValue(name, {\n ...value,\n disabled: checked,\n });\n }\n\n return (\n <FormField\n control={control}\n name={name}\n render={({ field }: { field: { value?: FormFieldValue } }) => (\n <FormItem>\n <div className=\"fk:flex\">\n <div className=\"fk:full-w fk:grid fk:gap-2\">\n <FormLabel>{label}</FormLabel>\n {options?.comment ? <FormDescription>{options.comment}</FormDescription> : null}\n </div>\n <div className=\"fk:h-full fk:self-end fk:ml-auto\">\n {/* TODO: this should be a slot that can receive user-defined components and system components like Presence and AI Writting Tools */}\n </div>\n </div>\n <FormControl>\n <TextareaPrimitive\n className={`fk:w-full fk:mt-[0.1875rem] ${\n !field.value?.scope || field.value.scope === 'default' ? 'fk:mb-3' : ''\n }`}\n disabled={isEditable === false || field.value?.disabled}\n {...field}\n onChange={(event) => {\n handleInput(event, field.value);\n }}\n value={(field.value?.value as string) || ''}\n />\n </FormControl>\n <DefaultValueSwitch\n checked={field.value?.disabled ?? false}\n onChange={(checked) => {\n handleCheckbox(checked, field.value);\n }}\n scope={field.value?.scope}\n />\n <FormMessage />\n </FormItem>\n )}\n />\n );\n}\n"]}
package/dist/index.css CHANGED
@@ -44,6 +44,7 @@
44
44
  --fk-font-weight-bold: 700;
45
45
  --fk-tracking-tight: -0.025em;
46
46
  --fk-tracking-widest: 0.1em;
47
+ --fk-leading-snug: 1.375;
47
48
  --fk-leading-normal: 1.5;
48
49
  --fk-leading-relaxed: 1.625;
49
50
  --fk-radius-xs: 0.125rem;
@@ -1428,6 +1429,9 @@
1428
1429
  .fk\:max-w-\(--skeleton-width\) {
1429
1430
  max-width: var(--skeleton-width);
1430
1431
  }
1432
+ .fk\:max-w-64 {
1433
+ max-width: calc(var(--fk-spacing) * 64);
1434
+ }
1431
1435
  .fk\:max-w-\[90vw\] {
1432
1436
  max-width: 90vw;
1433
1437
  }
@@ -1582,9 +1586,6 @@
1582
1586
  .fk\:grid-cols-1 {
1583
1587
  grid-template-columns: repeat(1, minmax(0, 1fr));
1584
1588
  }
1585
- .fk\:grid-cols-\[0_1fr\] {
1586
- grid-template-columns: 0 1fr;
1587
- }
1588
1589
  .fk\:grid-cols-\[repeat\(auto-fill\,minmax\(8rem\,1fr\)\)\] {
1589
1590
  grid-template-columns: repeat(auto-fill,minmax(8rem,1fr));
1590
1591
  }
@@ -1624,9 +1625,6 @@
1624
1625
  .fk\:justify-start {
1625
1626
  justify-content: flex-start;
1626
1627
  }
1627
- .fk\:justify-items-start {
1628
- justify-items: start;
1629
- }
1630
1628
  .fk\:gap-0 {
1631
1629
  gap: calc(var(--fk-spacing) * 0);
1632
1630
  }
@@ -1713,9 +1711,6 @@
1713
1711
  margin-inline-end: calc(calc(var(--fk-spacing) * 2) * calc(1 - var(--tw-space-x-reverse)));
1714
1712
  }
1715
1713
  }
1716
- .fk\:gap-y-0\.5 {
1717
- row-gap: calc(var(--fk-spacing) * 0.5);
1718
- }
1719
1714
  .fk\:gap-y-5 {
1720
1715
  row-gap: calc(var(--fk-spacing) * 5);
1721
1716
  }
@@ -1888,6 +1883,9 @@
1888
1883
  .fk\:bg-destructive {
1889
1884
  background-color: hsl(var(--destructive));
1890
1885
  }
1886
+ .fk\:bg-destructive-foreground {
1887
+ background-color: hsl(var(--destructive-foreground));
1888
+ }
1891
1889
  .fk\:bg-foreground {
1892
1890
  background-color: hsl(var(--foreground));
1893
1891
  }
@@ -2202,6 +2200,10 @@
2202
2200
  --tw-leading: var(--fk-leading-normal);
2203
2201
  line-height: var(--fk-leading-normal);
2204
2202
  }
2203
+ .fk\:leading-snug {
2204
+ --tw-leading: var(--fk-leading-snug);
2205
+ line-height: var(--fk-leading-snug);
2206
+ }
2205
2207
  .fk\:font-bold {
2206
2208
  --tw-font-weight: var(--fk-font-weight-bold);
2207
2209
  font-weight: var(--fk-font-weight-bold);
@@ -3707,16 +3709,6 @@
3707
3709
  background-color: hsl(var(--sidebar-background));
3708
3710
  }
3709
3711
  }
3710
- .fk\:has-\[\>svg\]\:grid-cols-\[calc\(var\(--spacing\)\*4\)_1fr\] {
3711
- &:has(>svg) {
3712
- grid-template-columns: calc(var(--spacing) * 4) 1fr;
3713
- }
3714
- }
3715
- .fk\:has-\[\>svg\]\:gap-x-3 {
3716
- &:has(>svg) {
3717
- column-gap: calc(var(--fk-spacing) * 3);
3718
- }
3719
- }
3720
3712
  .fk\:has-\[\>svg\]\:px-1\.5 {
3721
3713
  &:has(>svg) {
3722
3714
  padding-inline: calc(var(--fk-spacing) * 1.5);
@@ -3842,6 +3834,11 @@
3842
3834
  flex-direction: column;
3843
3835
  }
3844
3836
  }
3837
+ .fk\:data-inset\:pl-8 {
3838
+ &[data-inset] {
3839
+ padding-left: calc(var(--fk-spacing) * 8);
3840
+ }
3841
+ }
3845
3842
  .fk\:data-placeholder\:text-muted-foreground {
3846
3843
  &[data-placeholder] {
3847
3844
  color: hsl(var(--muted-foreground));
@@ -3888,11 +3885,6 @@
3888
3885
  color: hsl(var(--destructive));
3889
3886
  }
3890
3887
  }
3891
- .fk\:data-\[inset\]\:pl-8 {
3892
- &[data-inset] {
3893
- padding-left: calc(var(--fk-spacing) * 8);
3894
- }
3895
- }
3896
3888
  .fk\:data-\[orientation\=horizontal\]\:h-px {
3897
3889
  &[data-orientation="horizontal"] {
3898
3890
  height: 1px;
@@ -4091,16 +4083,6 @@
4091
4083
  max-width: var(--fk-container-xs);
4092
4084
  }
4093
4085
  }
4094
- .fk\:\*\:data-\[slot\=alert-description\]\:text-destructive\/90 {
4095
- :is(& > *) {
4096
- &[data-slot="alert-description"] {
4097
- color: hsl(var(--destructive));
4098
- @supports (color: color-mix(in lab, red, red)) {
4099
- color: color-mix(in oklab, hsl(var(--destructive)) 90%, transparent);
4100
- }
4101
- }
4102
- }
4103
- }
4104
4086
  .fk\:\*\:data-\[slot\=avatar\]\:ring-2 {
4105
4087
  :is(& > *) {
4106
4088
  &[data-slot="avatar"] {
@@ -4777,6 +4759,11 @@
4777
4759
  }
4778
4760
  }
4779
4761
  }
4762
+ .fk\:dark\:bg-foreground {
4763
+ &:is([style="color-scheme: dark;"] *) {
4764
+ background-color: hsl(var(--foreground));
4765
+ }
4766
+ }
4780
4767
  .fk\:dark\:bg-input\/30 {
4781
4768
  &:is([style="color-scheme: dark;"] *) {
4782
4769
  background-color: hsl(var(--input));
@@ -4990,6 +4977,16 @@
4990
4977
  }
4991
4978
  }
4992
4979
  }
4980
+ .fk\:data-disabled\:pointer-events-none {
4981
+ &:where([data-disabled="true"]), &:where([data-disabled]:not([data-disabled="false"])) {
4982
+ pointer-events: none;
4983
+ }
4984
+ }
4985
+ .fk\:data-disabled\:opacity-50 {
4986
+ &:where([data-disabled="true"]), &:where([data-disabled]:not([data-disabled="false"])) {
4987
+ opacity: 50%;
4988
+ }
4989
+ }
4993
4990
  .fk\:\[\&_\[cmdk-group\]\:not\(\[hidden\]\)_\~\[cmdk-group\]\]\:pt-0 {
4994
4991
  & [cmdk-group]:not([hidden]) ~[cmdk-group] {
4995
4992
  padding-top: calc(var(--fk-spacing) * 0);
@@ -5206,6 +5203,21 @@
5206
5203
  pointer-events: none;
5207
5204
  }
5208
5205
  }
5206
+ .fk\:\[\&\>svg\]\:absolute {
5207
+ &>svg {
5208
+ position: absolute;
5209
+ }
5210
+ }
5211
+ .fk\:\[\&\>svg\]\:top-4 {
5212
+ &>svg {
5213
+ top: calc(var(--fk-spacing) * 4);
5214
+ }
5215
+ }
5216
+ .fk\:\[\&\>svg\]\:left-4 {
5217
+ &>svg {
5218
+ left: calc(var(--fk-spacing) * 4);
5219
+ }
5220
+ }
5209
5221
  .fk\:\[\&\>svg\]\:size-3 {
5210
5222
  &>svg {
5211
5223
  width: calc(var(--fk-spacing) * 3);
@@ -5239,15 +5251,14 @@
5239
5251
  flex-shrink: 0;
5240
5252
  }
5241
5253
  }
5242
- .fk\:\[\&\>svg\]\:translate-y-0\.5 {
5254
+ .fk\:\[\&\>svg\]\:text-destructive {
5243
5255
  &>svg {
5244
- --tw-translate-y: calc(var(--fk-spacing) * 0.5);
5245
- translate: var(--tw-translate-x) var(--tw-translate-y);
5256
+ color: hsl(var(--destructive));
5246
5257
  }
5247
5258
  }
5248
- .fk\:\[\&\>svg\]\:text-current {
5259
+ .fk\:\[\&\>svg\]\:text-foreground {
5249
5260
  &>svg {
5250
- color: currentcolor;
5261
+ color: hsl(var(--foreground));
5251
5262
  }
5252
5263
  }
5253
5264
  .fk\:\[\&\>svg\]\:text-muted-foreground {
@@ -5299,6 +5310,17 @@
5299
5310
  }
5300
5311
  }
5301
5312
  }
5313
+ .fk\:\[\&\>svg\+div\]\:translate-y-\[-3px\] {
5314
+ &>svg+div {
5315
+ --tw-translate-y: -3px;
5316
+ translate: var(--tw-translate-x) var(--tw-translate-y);
5317
+ }
5318
+ }
5319
+ .fk\:\[\&\>svg\~\*\]\:pl-7 {
5320
+ &>svg~* {
5321
+ padding-left: calc(var(--fk-spacing) * 7);
5322
+ }
5323
+ }
5302
5324
  .fk\:\[\&\>tr\]\:last\:border-b-0 {
5303
5325
  &>tr {
5304
5326
  &:last-child {
@@ -5396,6 +5418,50 @@
5396
5418
  }
5397
5419
  }
5398
5420
  }
5421
+ @property --scroll-fade-t {
5422
+ syntax: "<length-percentage>";
5423
+ inherits: false;
5424
+ initial-value: 0px;
5425
+ }
5426
+ @property --scroll-fade-b {
5427
+ syntax: "<length-percentage>";
5428
+ inherits: false;
5429
+ initial-value: 0px;
5430
+ }
5431
+ @property --scroll-fade-s {
5432
+ syntax: "<length-percentage>";
5433
+ inherits: false;
5434
+ initial-value: 0px;
5435
+ }
5436
+ @property --scroll-fade-e {
5437
+ syntax: "<length-percentage>";
5438
+ inherits: false;
5439
+ initial-value: 0px;
5440
+ }
5441
+ @property --scroll-fade-mask {
5442
+ syntax: "*";
5443
+ inherits: false;
5444
+ }
5445
+ @property --shimmer-angle {
5446
+ syntax: "<angle>";
5447
+ inherits: true;
5448
+ initial-value: 20deg;
5449
+ }
5450
+ @property --shimmer-image {
5451
+ syntax: "*";
5452
+ inherits: false;
5453
+ }
5454
+ @property --shimmer-text-fill {
5455
+ syntax: "*";
5456
+ inherits: false;
5457
+ }
5458
+ @media (prefers-reduced-motion: reduce) {
5459
+ .shimmer {
5460
+ animation: none;
5461
+ background-image: none;
5462
+ -webkit-text-fill-color: currentColor;
5463
+ }
5464
+ }
5399
5465
  html, body {
5400
5466
  height: 100%;
5401
5467
  }
@@ -5469,8 +5535,8 @@ html, body {
5469
5535
  --accent: 240 2% 18%;
5470
5536
  --accent-foreground: 0 0% 98%;
5471
5537
  --link: 212 100% 48%;
5472
- --destructive: 357 100% 69%;
5473
- --destructive-foreground: 0 0% 100%;
5538
+ --destructive: 354 82% 49%;
5539
+ --destructive-foreground: 350 90% 10%;
5474
5540
  --warning: 36 100% 50%;
5475
5541
  --warning-foreground: 357 100% 96%;
5476
5542
  --success: 149 89% 43%;
@@ -6022,6 +6088,9 @@ pre {
6022
6088
  }
6023
6089
  @layer properties {
6024
6090
  @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {
6091
+ :root, :host {
6092
+ --shimmer-angle: 20deg;
6093
+ }
6025
6094
  *, ::before, ::after, ::backdrop {
6026
6095
  --tw-translate-x: 0;
6027
6096
  --tw-translate-y: 0;
@@ -6077,6 +6146,13 @@ pre {
6077
6146
  --tw-ease: initial;
6078
6147
  --tw-content: "";
6079
6148
  --tw-outline-style: solid;
6149
+ --scroll-fade-t: 0px;
6150
+ --scroll-fade-b: 0px;
6151
+ --scroll-fade-s: 0px;
6152
+ --scroll-fade-e: 0px;
6153
+ --scroll-fade-mask: initial;
6154
+ --shimmer-image: initial;
6155
+ --shimmer-text-fill: initial;
6080
6156
  }
6081
6157
  }
6082
6158
  }
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import * as React$1 from 'react';
2
2
  import React__default, { Dispatch, JSX, SetStateAction, UIEvent, ReactElement } from 'react';
3
- import { A as AppContextType, a as ActionSetRelationship, b as ActionSetScope, C as Config, c as AppOptions, E as Entity, P as PluginOptions, d as ProjectOptions, O as OrderedAssetValue, e as SearchRequestProps, f as SearchResultItem, U as UseEntityQueryParams, M as MappedEntityItem, F as FormEntityItem, I as ImageValue, g as Schema, h as AttributeValue, i as Attribute, j as MultipleRelationshipConnection, k as SingleRelationshipConnection } from './types.d-DiQPwK_q.js';
4
- export { D as DataType, l as DefaultValue, m as DefaultValueByDataType, n as EntityData, o as FormFieldParams, p as FormFieldProps, q as FormFieldValue, L as LogoProps, r as ScopeType, S as SingleProject } from './types.d-DiQPwK_q.js';
3
+ import { A as AppContextType, a as ActionSetRelationship, b as ActionSetScope, C as Config, c as AppOptions, E as Entity, P as PluginOptions, d as ProjectOptions, O as OrderedAssetValue, e as SearchRequestProps, f as SearchResultItem, g as Attribute, U as UseEntityQueryParams, M as MappedEntityItem, F as FormEntityItem, I as ImageValue, h as Schema, i as AttributeValue, j as MultipleRelationshipConnection, k as SingleRelationshipConnection } from './types.d-6y0oZ2Hh.js';
4
+ export { D as DataType, l as DefaultValue, m as DefaultValueByDataType, n as EntityData, o as FormFieldParams, p as FormFieldProps, q as FormFieldValue, L as LogoProps, r as ScopeType, S as SingleProject } from './types.d-6y0oZ2Hh.js';
5
5
  export { Outlet, useLocation, useParams } from 'react-router-dom';
6
6
  import { OperationVariables, DocumentNode, ErrorLike } from '@apollo/client';
7
7
  export { gql } from '@apollo/client';
@@ -92,12 +92,39 @@ declare function defineConfig<T extends Config>(config: T): T;
92
92
 
93
93
  declare function defineEntity<T extends Entity>(entity: T): Entity;
94
94
 
95
+ /**
96
+ * Space bindings use OR semantics: a resource bound to ['finance', 'mkt'] is
97
+ * accessible to members of either space. Unbound resources are accessible to
98
+ * everyone. This is a UI convenience only — the server enforces the same
99
+ * rules through generated @authorization directives.
100
+ *
101
+ * `userSpaces === undefined` means membership is not known yet (auth still
102
+ * loading). Treat that as allowed so space-bound entities/attributes do not
103
+ * flicker out of the Desk sidebar, grids, and forms. Once auth resolves,
104
+ * `spaces` is always an array — possibly empty for users with no memberships.
105
+ */
106
+ declare function canAccessSpaces(userSpaces: string[] | undefined, resourceSpaces: string[] | undefined): boolean;
107
+ declare function filterAttributesForSpaces(attributes: Attribute[], userSpaces: string[] | undefined): Attribute[];
108
+ declare function filterEntitiesForSpaces(schema: Entity[], userSpaces: string[] | undefined): Entity[];
109
+
110
+ /**
111
+ * Viewers are read-only: the GraphQL route and the automations API reject
112
+ * their mutations server-side. This helper only mirrors that rule in the UI
113
+ * so restricted actions render as disabled instead of failing on submit.
114
+ * While the role is still unknown (auth loading) actions stay enabled and
115
+ * the server remains the source of truth.
116
+ */
117
+ declare function canMutateData(role: string | null | undefined): boolean;
118
+ declare function useCanMutate(): boolean;
119
+
95
120
  type User = {
96
121
  id: string;
97
122
  email: string;
98
123
  display_name: string;
99
124
  avatar_url: string;
100
125
  role: string;
126
+ /** Space codes the user belongs to (owners receive every project space). */
127
+ spaces: string[];
101
128
  };
102
129
 
103
130
  type Auth = {
@@ -130,7 +157,9 @@ declare function useEntityQuery({ entityNamePlural, schema, scope, variables, is
130
157
  isLoadingMore: boolean;
131
158
  isProjectDisabled: boolean;
132
159
  isProjectReadOnly: boolean;
133
- reload: () => void;
160
+ reload: (options?: {
161
+ preserve?: boolean;
162
+ }) => Promise<void>;
134
163
  schemaErrorMessage: string | null;
135
164
  };
136
165
 
@@ -173,6 +202,12 @@ type EntityQuery = {
173
202
  };
174
203
  declare function getEntityQuery(entityNamePlural: string, scope: string, schema: Schema, options?: {
175
204
  selection?: 'list' | 'full';
205
+ /**
206
+ * The top-level aggregate count is a filtered label scan on the server.
207
+ * Pagination pages (fetchMore) skip it — the total from the first page
208
+ * still stands.
209
+ */
210
+ includeCount?: boolean;
176
211
  }): EntityQuery;
177
212
  /**
178
213
  * Returns a string with the GraphQl query needed to mutate the dataToMutate object for the given entity and scope.
@@ -354,4 +389,4 @@ declare const assetSchema: Entity;
354
389
 
355
390
  declare const tagSchema: Entity;
356
391
 
357
- export { AppOptions, Attribute, AttributeValue, type ConfigContext, DataTable, DataTableColumnHeader, DataTableFacetedFilter, DataTableRowActions, DataTableSortedBy, DataTableToolbar, DataTableViewOptions, DefaultValueSwitch, Entity, type EntityListRowPatch, FlexkitStudio, FormEntityItem, IMAGES_BASE_URL, MappedEntityItem, PluginOptions, ProjectDisabled, Schema, SchemaError, SearchRequestProps, SearchResultItem, type UploadedFileResult, assetSchema, defineConfig, defineEntity, getEntityCreateMutation, getEntityDeleteMutation, getEntityDeleteWhere, getEntityQuery, getEntitySchema, getEntityUpdateMutation, tagSchema, useAppContext, useAppDispatch, useAuth, useConfig, useDispatch, useEntityMutation, useEntityQuery, useGraphQLError, useGridColumnsDefinition, usePatchEntityList, useRefreshEntityList, useSearch, useUploadAssets };
392
+ export { AppOptions, Attribute, AttributeValue, type ConfigContext, DataTable, DataTableColumnHeader, DataTableFacetedFilter, DataTableRowActions, DataTableSortedBy, DataTableToolbar, DataTableViewOptions, DefaultValueSwitch, Entity, type EntityListRowPatch, FlexkitStudio, FormEntityItem, IMAGES_BASE_URL, MappedEntityItem, PluginOptions, ProjectDisabled, Schema, SchemaError, SearchRequestProps, SearchResultItem, type UploadedFileResult, assetSchema, canAccessSpaces, canMutateData, defineConfig, defineEntity, filterAttributesForSpaces, filterEntitiesForSpaces, getEntityCreateMutation, getEntityDeleteMutation, getEntityDeleteWhere, getEntityQuery, getEntitySchema, getEntityUpdateMutation, tagSchema, useAppContext, useAppDispatch, useAuth, useCanMutate, useConfig, useDispatch, useEntityMutation, useEntityQuery, useGraphQLError, useGridColumnsDefinition, usePatchEntityList, useRefreshEntityList, useSearch, useUploadAssets };