create-twenty-app 2.26.0 → 2.27.0

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.
package/dist/cli.mjs CHANGED
@@ -30,7 +30,7 @@ var b = Object.create, x = Object.defineProperty, S = Object.getOwnPropertyDescr
30
30
  enumerable: !0
31
31
  }) : n, e)), re = {
32
32
  name: "create-twenty-app",
33
- version: "2.26.0",
33
+ version: "2.27.0",
34
34
  description: "Command-line interface to create Twenty application",
35
35
  main: "dist/cli.cjs",
36
36
  bin: "dist/cli.cjs",
@@ -12836,7 +12836,7 @@ function cp(e) {
12836
12836
  return e != null;
12837
12837
  }
12838
12838
  //#endregion
12839
- //#region ../twenty-shared/dist/types-C-lofeKZ.mjs
12839
+ //#region ../twenty-shared/dist/types-Cw_53d6H.mjs
12840
12840
  var lp = /* @__PURE__ */ function(e) {
12841
12841
  return e.EMAIL = "EMAIL", e.CALENDAR = "CALENDAR", e.WORKFLOW = "WORKFLOW", e.AGENT = "AGENT", e.API = "API", e.IMPORT = "IMPORT", e.MANUAL = "MANUAL", e.SYSTEM = "SYSTEM", e.WEBHOOK = "WEBHOOK", e.APPLICATION = "APPLICATION", e;
12842
12842
  }({}), up = {
@@ -13444,7 +13444,7 @@ var vp = /* @__PURE__ */ function(e) {
13444
13444
  A.RAW_JSON
13445
13445
  ]), yp.DAY, yp.WEEK, yp.MONTH, yp.QUARTER, yp.YEAR, A.FILES, A.LINKS, A.TEXT, A.FULL_NAME, A.UUID;
13446
13446
  //#endregion
13447
- //#region ../twenty-shared/dist/constants-DZ04IUls.mjs
13447
+ //#region ../twenty-shared/dist/constants-Cjh8QmJf.mjs
13448
13448
  var Tp = [
13449
13449
  "RATING_1",
13450
13450
  "RATING_2",
@@ -60755,7 +60755,7 @@ function jk() {
60755
60755
  }
60756
60756
  bD();
60757
60757
  //#endregion
60758
- //#region ../twenty-shared/dist/utils-CHk9ouvV.mjs
60758
+ //#region ../twenty-shared/dist/utils-ClVhjZ_j.mjs
60759
60759
  var Mk = /* @__PURE__ */ ne(sO(), 1);
60760
60760
  cO(), ek(), ak(), A.TEXT, A.FULL_NAME, A.EMAILS, A.ADDRESS, A.LINKS, A.PHONES, A.RICH_TEXT, A.UUID;
60761
60761
  var Nk = (e) => /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(e);
@@ -62470,10 +62470,10 @@ var kj = [Y.IS_EMPTY, Y.IS_NOT_EMPTY], Aj = [Y.IS, Y.IS_NOT];
62470
62470
  Y.IS_NOT,
62471
62471
  ...kj
62472
62472
  ], Y.IS, Y.IS_NOT, Y.IS_EMPTY, Y.IS_NOT_EMPTY;
62473
- var jj = (e, t, n) => Object.values(Cp[e]).includes(t) && t === n, Mj = $l().transform((e) => e === "" ? [] : dM(e) ? [e] : JSON.parse(e)).refine((e) => Array.isArray(e) && e.every((e) => typeof e == "string"), { error: "Expected an array of strings" }), Nj = zf((e) => {
62473
+ var jj = (e, t, n) => Object.values(Cp[e]).includes(t) && t === n, Mj = $l().transform((e) => e === "" ? [] : pM(e) ? [e] : JSON.parse(e)).refine((e) => Array.isArray(e) && e.every((e) => typeof e == "string"), { error: "Expected an array of strings" }), Nj = zf((e) => {
62474
62474
  try {
62475
62475
  if (typeof e == "string") {
62476
- if (dM(e)) return [e];
62476
+ if (pM(e)) return [e];
62477
62477
  try {
62478
62478
  let t = JSON.parse(e);
62479
62479
  return Array.isArray(t) ? t : [t];
@@ -62485,7 +62485,7 @@ var jj = (e, t, n) => Object.values(Cp[e]).includes(t) && t === n, Mj = $l().tra
62485
62485
  } catch {
62486
62486
  return [];
62487
62487
  }
62488
- }, Cd($l().refine((e) => Nk(e) || dM(e), "Must be a valid UUID or a variable with {{ }} syntax"))).catch([]), Pj = Ed({
62488
+ }, Cd($l().refine((e) => Nk(e) || pM(e), "Must be a valid UUID or a variable with {{ }} syntax"))).catch([]), Pj = Ed({
62489
62489
  isCurrentWorkspaceMemberSelected: q().optional(),
62490
62490
  isCurrentRecordSelected: q().optional(),
62491
62491
  selectedRecordIds: Cd($l())
@@ -62498,13 +62498,13 @@ var jj = (e, t, n) => Object.values(Cp[e]).includes(t) && t === n, Mj = $l().tra
62498
62498
  message: e.message
62499
62499
  }), Se;
62500
62500
  }
62501
- }).pipe(Pj), Ij = ({ recordFilter: e, fieldMetadataItemById: t, filterValueDependencies: n }) => {
62501
+ }).pipe(Pj), Ij = /(?!^)\+|[^0-9+]/g, Lj = /[0-9]/, Rj = ({ recordFilter: e, fieldMetadataItemById: t, filterValueDependencies: n }) => {
62502
62502
  let r = t.get(e.fieldMetadataId);
62503
62503
  if (k(r) && Sj(e)) {
62504
62504
  if (r.type === A.RELATION && k(e.relationTargetFieldMetadataId)) {
62505
62505
  let i = t.get(e.relationTargetFieldMetadataId);
62506
62506
  if (!k(i)) return;
62507
- let a = Rj({
62507
+ let a = Bj({
62508
62508
  recordFilter: {
62509
62509
  ...e,
62510
62510
  fieldMetadataId: i.id,
@@ -62515,13 +62515,13 @@ var jj = (e, t, n) => Object.values(Cp[e]).includes(t) && t === n, Mj = $l().tra
62515
62515
  });
62516
62516
  return k(a) ? { [r.name]: a } : void 0;
62517
62517
  }
62518
- return Rj({
62518
+ return Bj({
62519
62519
  recordFilter: e,
62520
62520
  fieldMetadataItem: r,
62521
62521
  filterValueDependencies: n
62522
62522
  });
62523
62523
  }
62524
- }, Lj = ({ fieldMetadataItem: e, filterValueDependencies: t }) => {
62524
+ }, zj = ({ fieldMetadataItem: e, filterValueDependencies: t }) => {
62525
62525
  if (e.type !== A.MORPH_RELATION) return fj({ name: e.name });
62526
62526
  let n = e.morphRelations?.find((e) => e.targetObjectMetadata.nameSingular === t.currentRecord?.objectMetadataNameSingular);
62527
62527
  if (k(n)) return pj({
@@ -62530,7 +62530,7 @@ var jj = (e, t, n) => Object.values(Cp[e]).includes(t) && t === n, Mj = $l().tra
62530
62530
  targetObjectMetadataNameSingular: n.targetObjectMetadata.nameSingular,
62531
62531
  targetObjectMetadataNamePlural: n.targetObjectMetadata.namePlural
62532
62532
  });
62533
- }, Rj = ({ recordFilter: e, fieldMetadataItem: t, filterValueDependencies: n }) => {
62533
+ }, Bj = ({ recordFilter: e, fieldMetadataItem: t, filterValueDependencies: n }) => {
62534
62534
  if (gj({
62535
62535
  recordFilterOperand: e.operand,
62536
62536
  correspondingFieldMetadataItem: t
@@ -62562,7 +62562,7 @@ var jj = (e, t, n) => Object.values(Cp[e]).includes(t) && t === n, Mj = $l().tra
62562
62562
  }
62563
62563
  case "DATE":
62564
62564
  if (e.operand === Y.IS_RELATIVE) {
62565
- let n = $j(e.value), r = eM({
62565
+ let n = tM(e.value), r = nM({
62566
62566
  value: "PAST_1_DAY",
62567
62567
  operand: Y.IS_RELATIVE
62568
62568
  });
@@ -62588,9 +62588,9 @@ var jj = (e, t, n) => Object.values(Cp[e]).includes(t) && t === n, Mj = $l().tra
62588
62588
  throw Error(`Unknown operand ${e.operand} for ${a} filter`);
62589
62589
  case "DATE_TIME":
62590
62590
  if (e.operand === Y.IS_RELATIVE) {
62591
- let r = rM(e), i = k(r) && typeof r == "object" ? r : null;
62591
+ let r = aM(e), i = k(r) && typeof r == "object" ? r : null;
62592
62592
  if (!k(i)) throw Error(`Cannot parse relative date filter : "${e.value}"`);
62593
- let a = rM({
62593
+ let a = aM({
62594
62594
  value: `PAST_1_DAY;;${n.timeZone}`,
62595
62595
  operand: Y.IS_RELATIVE
62596
62596
  });
@@ -62603,7 +62603,7 @@ var jj = (e, t, n) => Object.values(Cp[e]).includes(t) && t === n, Mj = $l().tra
62603
62603
  switch (e.operand) {
62604
62604
  case Y.IS_IN_PAST: return { [t.name]: { lt: r.toInstant().round("minute").toString() } };
62605
62605
  case Y.IS_IN_FUTURE: return { [t.name]: { gt: r.toInstant().round("minute").toString() } };
62606
- case Y.IS_TODAY: return { and: [{ [t.name]: { gte: Uj(r, "DAY").toInstant().toString() } }, { [t.name]: { lt: Wj(r, "DAY").toInstant().toString() } }] };
62606
+ case Y.IS_TODAY: return { and: [{ [t.name]: { gte: Gj(r, "DAY").toInstant().toString() } }, { [t.name]: { lt: Kj(r, "DAY").toInstant().toString() } }] };
62607
62607
  }
62608
62608
  } else {
62609
62609
  if (!(0, xe.isNonEmptyString)(e.value)) throw Error("Date filter is empty");
@@ -62649,7 +62649,7 @@ var jj = (e, t, n) => Object.values(Cp[e]).includes(t) && t === n, Mj = $l().tra
62649
62649
  ...i ? [n.currentRecord?.id] : []
62650
62650
  ].filter(k);
62651
62651
  if (s.length === 0) return;
62652
- let c = Lj({
62652
+ let c = zj({
62653
62653
  fieldMetadataItem: t,
62654
62654
  filterValueDependencies: n
62655
62655
  });
@@ -62799,8 +62799,8 @@ var jj = (e, t, n) => Object.values(Cp[e]).includes(t) && t === n, Mj = $l().tra
62799
62799
  });
62800
62800
  case "PHONES": {
62801
62801
  if (!i) {
62802
- let n = e.value.replace(/[^0-9]/g, "");
62803
- if (!(0, xe.isNonEmptyString)(n)) return;
62802
+ let n = e.value.trim().replace(Ij, "");
62803
+ if (!Lj.test(n)) return;
62804
62804
  switch (e.operand) {
62805
62805
  case Y.CONTAINS: return { or: [
62806
62806
  { [t.name]: { primaryPhoneNumber: { ilike: `%${n}%` } } },
@@ -62846,14 +62846,14 @@ var jj = (e, t, n) => Object.values(Cp[e]).includes(t) && t === n, Mj = $l().tra
62846
62846
  }
62847
62847
  default: throw Error("Unknown filter type");
62848
62848
  }
62849
- }, zj = ({ filterValueDependencies: e, filters: t, fieldMetadataItemById: n, recordFilterGroups: r, currentRecordFilterGroupId: i }) => {
62849
+ }, Vj = ({ filterValueDependencies: e, filters: t, fieldMetadataItemById: n, recordFilterGroups: r, currentRecordFilterGroupId: i }) => {
62850
62850
  let a = r.find((e) => e.id === i);
62851
62851
  if (!k(a)) return;
62852
- let o = t.filter((e) => e.recordFilterGroupId === i).map((t) => Ij({
62852
+ let o = t.filter((e) => e.recordFilterGroupId === i).map((t) => Rj({
62853
62853
  filterValueDependencies: e,
62854
62854
  recordFilter: t,
62855
62855
  fieldMetadataItemById: n
62856
- })).filter(k), s = r.filter((e) => e.parentRecordFilterGroupId === i).map((i) => zj({
62856
+ })).filter(k), s = r.filter((e) => e.parentRecordFilterGroupId === i).map((i) => Vj({
62857
62857
  filterValueDependencies: e,
62858
62858
  filters: t,
62859
62859
  fieldMetadataItemById: n,
@@ -62863,7 +62863,7 @@ var jj = (e, t, n) => Object.values(Cp[e]).includes(t) && t === n, Mj = $l().tra
62863
62863
  if (a.logicalOperator === bp.AND) return { and: [...o, ...s] };
62864
62864
  if (a.logicalOperator === bp.OR) return { or: [...o, ...s] };
62865
62865
  throw Error(`Unknown logical operator ${a.logicalOperator}`);
62866
- }, Bj = (e, t, n) => {
62866
+ }, Hj = (e, t, n) => {
62867
62867
  switch (t) {
62868
62868
  case "DAY": return e.add({ days: n });
62869
62869
  case "WEEK": return e.add({ weeks: n });
@@ -62875,22 +62875,22 @@ var jj = (e, t, n) => Object.values(Cp[e]).includes(t) && t === n, Mj = $l().tra
62875
62875
  case "HOUR": return e.add({ hours: n });
62876
62876
  default: return Pk(t);
62877
62877
  }
62878
- }, Vj = Zf.enum([
62878
+ }, Uj = Zf.enum([
62879
62879
  vp.MONDAY,
62880
62880
  vp.SATURDAY,
62881
62881
  vp.SUNDAY
62882
- ]), Hj = (e) => {
62882
+ ]), Wj = (e) => {
62883
62883
  switch (e) {
62884
62884
  case vp.MONDAY: return 1;
62885
62885
  case vp.SATURDAY: return 6;
62886
62886
  case vp.SUNDAY: return 7;
62887
62887
  default: return Pk(e);
62888
62888
  }
62889
- }, Uj = (e, t, n) => {
62889
+ }, Gj = (e, t, n) => {
62890
62890
  switch (t) {
62891
62891
  case "DAY": return e.startOfDay();
62892
62892
  case "WEEK": {
62893
- let t = k(n) ? Hj(n) : 1, r = (e.dayOfWeek - t + 7) % 7;
62893
+ let t = k(n) ? Wj(n) : 1, r = (e.dayOfWeek - t + 7) % 7;
62894
62894
  return e.startOfDay().subtract({ days: r });
62895
62895
  }
62896
62896
  case "QUARTER": {
@@ -62925,23 +62925,23 @@ var jj = (e, t, n) => Object.values(Cp[e]).includes(t) && t === n, Mj = $l().tra
62925
62925
  });
62926
62926
  default: return Pk(t);
62927
62927
  }
62928
- }, Wj = (e, t, n) => {
62928
+ }, Kj = (e, t, n) => {
62929
62929
  switch (t) {
62930
- case "DAY": return Uj(e, "DAY").add({ days: 1 });
62931
- case "WEEK": return Uj(e, "WEEK", n).add({ weeks: 1 });
62932
- case "MONTH": return Uj(e, "MONTH", n).add({ months: 1 });
62933
- case "QUARTER": return Uj(e, "QUARTER", n).add({ months: 3 });
62934
- case "YEAR": return Uj(e, "YEAR", n).add({ years: 1 });
62935
- case "SECOND": return Uj(e, "SECOND").add({ seconds: 1 });
62936
- case "MINUTE": return Uj(e, "MINUTE").add({ minutes: 1 });
62937
- case "HOUR": return Uj(e, "HOUR").add({ hours: 1 });
62930
+ case "DAY": return Gj(e, "DAY").add({ days: 1 });
62931
+ case "WEEK": return Gj(e, "WEEK", n).add({ weeks: 1 });
62932
+ case "MONTH": return Gj(e, "MONTH", n).add({ months: 1 });
62933
+ case "QUARTER": return Gj(e, "QUARTER", n).add({ months: 3 });
62934
+ case "YEAR": return Gj(e, "YEAR", n).add({ years: 1 });
62935
+ case "SECOND": return Gj(e, "SECOND").add({ seconds: 1 });
62936
+ case "MINUTE": return Gj(e, "MINUTE").add({ minutes: 1 });
62937
+ case "HOUR": return Gj(e, "HOUR").add({ hours: 1 });
62938
62938
  default: return Pk(t);
62939
62939
  }
62940
- }, Gj = Zf.union([Zf.coerce.number().int().positive(), Zf.literal("undefined")]).transform((e) => e === "undefined" ? void 0 : e), Kj = Zf.enum([
62940
+ }, qj = Zf.union([Zf.coerce.number().int().positive(), Zf.literal("undefined")]).transform((e) => e === "undefined" ? void 0 : e), Jj = Zf.enum([
62941
62941
  "NEXT",
62942
62942
  "THIS",
62943
62943
  "PAST"
62944
- ]), qj = Zf.enum([
62944
+ ]), Yj = Zf.enum([
62945
62945
  "SECOND",
62946
62946
  "MINUTE",
62947
62947
  "HOUR",
@@ -62950,24 +62950,24 @@ var jj = (e, t, n) => Object.values(Cp[e]).includes(t) && t === n, Mj = $l().tra
62950
62950
  "MONTH",
62951
62951
  "QUARTER",
62952
62952
  "YEAR"
62953
- ]), Jj = Zf.object({
62954
- direction: Kj,
62955
- amount: Gj.nullish(),
62956
- unit: qj,
62953
+ ]), Xj = Zf.object({
62954
+ direction: Jj,
62955
+ amount: qj.nullish(),
62956
+ unit: Yj,
62957
62957
  timezone: Zf.string().nullish(),
62958
- firstDayOfTheWeek: Vj.nullish()
62959
- }).refine((e) => !(e.amount === void 0 && e.direction !== "THIS"), { error: "Amount cannot be 'undefined' unless direction is 'THIS'" }), Yj = /((?:THIS)|(?:PAST)|(?:NEXT))_(\d*)_(DAY|MONTH|YEAR|WEEK|QUARTER|HOUR|MINUTE|SECOND)(?:(?:;;([^;;]*);;)?(?:(MONDAY|SUNDAY|SATURDAY);;)?)?/, Xj = Zf.string().transform((e, t) => {
62960
- let n = new RegExp(Yj).exec(e);
62958
+ firstDayOfTheWeek: Uj.nullish()
62959
+ }).refine((e) => !(e.amount === void 0 && e.direction !== "THIS"), { error: "Amount cannot be 'undefined' unless direction is 'THIS'" }), Zj = /((?:THIS)|(?:PAST)|(?:NEXT))_(\d*)_(DAY|MONTH|YEAR|WEEK|QUARTER|HOUR|MINUTE|SECOND)(?:(?:;;([^;;]*);;)?(?:(MONDAY|SUNDAY|SATURDAY);;)?)?/, Qj = Zf.string().transform((e, t) => {
62960
+ let n = new RegExp(Zj).exec(e);
62961
62961
  if (!(0, xe.isNonEmptyArray)(n)) return t.addIssue(`Cannot parse stringified inline relative date filter, value : "${e}"`), Zf.NEVER;
62962
62962
  let [r, i, a, o, s, c] = n;
62963
- return Jj.parse({
62963
+ return Xj.parse({
62964
62964
  direction: i,
62965
62965
  amount: a,
62966
62966
  unit: o,
62967
62967
  timezone: s,
62968
62968
  firstDayOfTheWeek: c
62969
62969
  });
62970
- }), Zj = (e, t, n) => {
62970
+ }), $j = (e, t, n) => {
62971
62971
  switch (t) {
62972
62972
  case "DAY": return e.subtract({ days: n });
62973
62973
  case "WEEK": return e.subtract({ weeks: n });
@@ -62979,12 +62979,12 @@ var jj = (e, t, n) => Object.values(Cp[e]).includes(t) && t === n, Mj = $l().tra
62979
62979
  case "HOUR": return e.subtract({ hours: n });
62980
62980
  default: return Pk(t);
62981
62981
  }
62982
- }, Qj = (e, t) => {
62982
+ }, eM = (e, t) => {
62983
62983
  let { direction: n, amount: r, unit: i, firstDayOfTheWeek: a } = e;
62984
62984
  switch (n) {
62985
62985
  case "NEXT": {
62986
62986
  if (!cp(r)) throw Error("Amount is required");
62987
- let n = Wj(t, i, a), o = Bj(n, i, r);
62987
+ let n = Kj(t, i, a), o = Hj(n, i, r);
62988
62988
  return {
62989
62989
  ...e,
62990
62990
  start: n.toPlainDate().toString(),
@@ -62993,7 +62993,7 @@ var jj = (e, t, n) => Object.values(Cp[e]).includes(t) && t === n, Mj = $l().tra
62993
62993
  }
62994
62994
  case "PAST": {
62995
62995
  if (!cp(r)) throw Error("Amount is required");
62996
- let n = Uj(t, i, a), o = Zj(n, i, r);
62996
+ let n = Gj(t, i, a), o = $j(n, i, r);
62997
62997
  return {
62998
62998
  ...e,
62999
62999
  start: o.toPlainDate().toString(),
@@ -63001,7 +63001,7 @@ var jj = (e, t, n) => Object.values(Cp[e]).includes(t) && t === n, Mj = $l().tra
63001
63001
  };
63002
63002
  }
63003
63003
  case "THIS": {
63004
- let n = Uj(t, i, a), r = Wj(t, i, a), o = n?.toPlainDate().toString(), s = r?.toPlainDate().toString();
63004
+ let n = Gj(t, i, a), r = Kj(t, i, a), o = n?.toPlainDate().toString(), s = r?.toPlainDate().toString();
63005
63005
  return {
63006
63006
  ...e,
63007
63007
  start: o,
@@ -63009,62 +63009,62 @@ var jj = (e, t, n) => Object.values(Cp[e]).includes(t) && t === n, Mj = $l().tra
63009
63009
  };
63010
63010
  }
63011
63011
  }
63012
- }, $j = (e) => {
63012
+ }, tM = (e) => {
63013
63013
  if (!(0, xe.isNonEmptyString)(e)) return null;
63014
- let t = Xj.safeParse(e);
63014
+ let t = Qj.safeParse(e);
63015
63015
  if (!t.success) return null;
63016
63016
  let n = t.data;
63017
- return Qj(n, cp(n.timezone) ? _D.Now.zonedDateTimeISO(n.timezone) : _D.Now.zonedDateTimeISO());
63018
- }, eM = (e) => e.value ? e.operand === Y.IS_RELATIVE ? $j(e.value) : e.value : null, tM = (e, t) => {
63017
+ return eM(n, cp(n.timezone) ? _D.Now.zonedDateTimeISO(n.timezone) : _D.Now.zonedDateTimeISO());
63018
+ }, nM = (e) => e.value ? e.operand === Y.IS_RELATIVE ? tM(e.value) : e.value : null, rM = (e, t) => {
63019
63019
  let { direction: n, amount: r, unit: i, firstDayOfTheWeek: a } = e;
63020
63020
  switch (n) {
63021
63021
  case "NEXT": {
63022
63022
  if (!k(r)) throw Error("Amount is required");
63023
- let n = Wj(t, i, a);
63023
+ let n = Kj(t, i, a);
63024
63024
  return {
63025
63025
  ...e,
63026
63026
  start: n,
63027
- end: Bj(n, i, r)
63027
+ end: Hj(n, i, r)
63028
63028
  };
63029
63029
  }
63030
63030
  case "PAST": {
63031
63031
  if (!k(r)) throw Error("Amount is required");
63032
- let n = Uj(t, i, a);
63032
+ let n = Gj(t, i, a);
63033
63033
  return {
63034
63034
  ...e,
63035
- start: Zj(n, i, r),
63035
+ start: $j(n, i, r),
63036
63036
  end: n
63037
63037
  };
63038
63038
  }
63039
63039
  case "THIS": return {
63040
63040
  ...e,
63041
- start: Uj(t, i, a),
63042
- end: Wj(t, i, a)
63041
+ start: Gj(t, i, a),
63042
+ end: Kj(t, i, a)
63043
63043
  };
63044
63044
  }
63045
- }, nM = (e) => {
63045
+ }, iM = (e) => {
63046
63046
  if (!(0, xe.isNonEmptyString)(e)) return null;
63047
- let t = Xj.safeParse(e);
63047
+ let t = Qj.safeParse(e);
63048
63048
  if (t.success) {
63049
63049
  let e = t.data;
63050
- return tM(e, (cp(e.timezone) ? _D.Now.zonedDateTimeISO(e.timezone) : _D.Now.zonedDateTimeISO()).round({ smallestUnit: "second" }));
63050
+ return rM(e, (cp(e.timezone) ? _D.Now.zonedDateTimeISO(e.timezone) : _D.Now.zonedDateTimeISO()).round({ smallestUnit: "second" }));
63051
63051
  } else return null;
63052
- }, rM = (e) => e.value ? e.operand === Y.IS_RELATIVE ? nM(e.value) : e.value : null;
63052
+ }, aM = (e) => e.value ? e.operand === Y.IS_RELATIVE ? iM(e.value) : e.value : null;
63053
63053
  xp.Is, Y.IS, xp.IsNotNull, Y.IS_NOT_NULL, xp.IsNot, Y.IS_NOT, xp.LessThanOrEqual, Y.LESS_THAN_OR_EQUAL, xp.GreaterThanOrEqual, Y.GREATER_THAN_OR_EQUAL, xp.IsBefore, Y.IS_BEFORE, xp.IsAfter, Y.IS_AFTER, xp.Contains, Y.CONTAINS, xp.DoesNotContain, Y.DOES_NOT_CONTAIN, xp.IsEmpty, Y.IS_EMPTY, xp.IsNotEmpty, Y.IS_NOT_EMPTY, xp.IsRelative, Y.IS_RELATIVE, xp.IsInPast, Y.IS_IN_PAST, xp.IsInFuture, Y.IS_IN_FUTURE, xp.IsToday, Y.IS_TODAY, Y.IS, Y.IS, Y.IS_NOT_NULL, Y.IS_NOT_NULL, Y.IS_NOT, Y.IS_NOT, Y.LESS_THAN_OR_EQUAL, Y.LESS_THAN_OR_EQUAL, Y.GREATER_THAN_OR_EQUAL, Y.GREATER_THAN_OR_EQUAL, Y.IS_BEFORE, Y.IS_BEFORE, Y.IS_AFTER, Y.IS_AFTER, Y.CONTAINS, Y.CONTAINS, Y.DOES_NOT_CONTAIN, Y.DOES_NOT_CONTAIN, Y.IS_EMPTY, Y.IS_EMPTY, Y.IS_NOT_EMPTY, Y.IS_NOT_EMPTY, Y.IS_RELATIVE, Y.IS_RELATIVE, Y.IS_IN_PAST, Y.IS_IN_PAST, Y.IS_IN_FUTURE, Y.IS_IN_FUTURE, Y.IS_TODAY, Y.IS_TODAY, Y.VECTOR_SEARCH, Y.VECTOR_SEARCH;
63054
- var iM = (e) => {
63054
+ var oM = (e) => {
63055
63055
  try {
63056
63056
  return new URL(e);
63057
63057
  } catch {
63058
63058
  return null;
63059
63059
  }
63060
- }, aM = (e) => e === void 0 || typeof e != "object" || !e ? e : Array.isArray(e) ? e.map((e) => aM(e)).filter((e) => !(0, xe.isUndefined)(e)) : Object.entries(e).reduce((e, [t, n]) => {
63060
+ }, sM = (e) => e === void 0 || typeof e != "object" || !e ? e : Array.isArray(e) ? e.map((e) => sM(e)).filter((e) => !(0, xe.isUndefined)(e)) : Object.entries(e).reduce((e, [t, n]) => {
63061
63061
  if ((0, xe.isUndefined)(n)) return e;
63062
63062
  if (n === null || n instanceof Date) return {
63063
63063
  ...e,
63064
63064
  [t]: n
63065
63065
  };
63066
63066
  if (typeof n == "object") {
63067
- let r = aM(n);
63067
+ let r = sM(n);
63068
63068
  return !(0, xe.isUndefined)(r) && Object.keys(r).length > 0 ? {
63069
63069
  ...e,
63070
63070
  [t]: r
@@ -63074,29 +63074,29 @@ var iM = (e) => {
63074
63074
  ...e,
63075
63075
  [t]: n
63076
63076
  };
63077
- }, {}), oM = {
63077
+ }, {}), cM = {
63078
63078
  BOLD: "bold",
63079
63079
  ITALIC: "italic",
63080
63080
  UNDERLINE: "underline",
63081
63081
  STRIKE: "strike",
63082
63082
  LINK: "link"
63083
63083
  };
63084
- oM.UNDERLINE, oM.BOLD, oM.ITALIC, oM.STRIKE, oM.LINK;
63085
- var sM = (e) => {
63084
+ cM.UNDERLINE, cM.BOLD, cM.ITALIC, cM.STRIKE, cM.LINK;
63085
+ var lM = (e) => {
63086
63086
  let t = e.trim();
63087
63087
  return t.startsWith("http://") || t.startsWith("https://") || t.startsWith("HTTPS://") || t.startsWith("HTTP://") ? t : `https://${t}`;
63088
- }, cM = (e, t) => {
63088
+ }, uM = (e, t) => {
63089
63089
  let n = t?.allowIp ?? !0, r = t?.allowLocalhost ?? !0, i = /^(((?!-))(xn--|_)?[a-z0-9-]{0,61}[a-z0-9]{1,1}\.){1,10}(xn--)?([a-z0-9][a-z0-9-]{0,60}|[a-z0-9-]{1,30}\.[a-z]{2,})$/.test(e), a = /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(e), o = e === "localhost" || e === "127.0.0.1";
63090
63090
  return o && !r || a && !n ? !1 : i || o || a;
63091
63091
  };
63092
63092
  $l().transform((e, t) => {
63093
- let n = sM(e.trim()), r = n.replace("https://", "").replace("http://", "").replace("HTTPS://", "").replace("HTTP://", "");
63093
+ let n = lM(e.trim()), r = n.replace("https://", "").replace("http://", "").replace("HTTPS://", "").replace("HTTP://", "");
63094
63094
  if (/^\d+(?:\/[a-zA-Z]*)?$/.test(r)) return t.addIssue({
63095
63095
  code: "custom",
63096
63096
  message: "domain is not a valid url"
63097
63097
  }), Se;
63098
63098
  try {
63099
- return cM(new URL(n).hostname) ? n : (t.addIssue({
63099
+ return uM(new URL(n).hostname) ? n : (t.addIssue({
63100
63100
  code: "custom",
63101
63101
  message: "domain is not a valid url"
63102
63102
  }), Se);
@@ -63107,61 +63107,61 @@ $l().transform((e, t) => {
63107
63107
  }), Se;
63108
63108
  }
63109
63109
  });
63110
- var lM = (e) => {
63111
- let t = iM(e);
63110
+ var dM = (e) => {
63111
+ let t = oM(e);
63112
63112
  return k(t) ? (t.origin + t.pathname + t.search + t.hash).replace(/\/$/, "") : e;
63113
- }, uM = (e) => {
63113
+ }, fM = (e) => {
63114
63114
  let t = e.trim();
63115
- return t === "" ? t : lM(sM(t));
63115
+ return t === "" ? t : dM(lM(t));
63116
63116
  };
63117
63117
  nu({ pattern: wn }).max(255);
63118
- var dM = (e) => /^{{[^{}]+}}$/.test(e), fM = /* @__PURE__ */ new Map();
63118
+ var pM = (e) => /^{{[^{}]+}}$/.test(e), mM = /* @__PURE__ */ new Map();
63119
63119
  for (let e of Ak()) {
63120
- let t = jk(e), n = fM.get(t);
63121
- n ? n.push(e) : fM.set(t, [e]);
63120
+ let t = jk(e), n = mM.get(t);
63121
+ n ? n.push(e) : mM.set(t, [e]);
63122
63122
  }
63123
63123
  new Set(Ak());
63124
- var pM = (e) => typeof e == "string", mM = RegExp("\\{\\{([^{}]+)\\}\\}", "g"), hM = (e, t) => k(e) ? pM(e) ? vM(e, t) : Array.isArray(e) ? gM(e, t) : typeof e == "object" && e ? _M(e, t) : e : e, gM = (e, t) => {
63124
+ var hM = (e) => typeof e == "string", gM = RegExp("\\{\\{([^{}]+)\\}\\}", "g"), _M = (e, t) => k(e) ? hM(e) ? bM(e, t) : Array.isArray(e) ? vM(e, t) : typeof e == "object" && e ? yM(e, t) : e : e, vM = (e, t) => {
63125
63125
  let n = e;
63126
- for (let r = 0; r < e.length; ++r) n[r] = hM(e[r], t);
63126
+ for (let r = 0; r < e.length; ++r) n[r] = _M(e[r], t);
63127
63127
  return n;
63128
- }, _M = (e, t) => Object.entries(e).reduce((e, [n, r]) => {
63129
- let i = hM(n, t);
63130
- return e[typeof i == "string" ? i : String(i)] = hM(r, t), e;
63131
- }, {}), vM = (e, t) => {
63132
- let n = e.match(mM);
63133
- return !n || n.length === 0 ? e : n.length === 1 && n[0] === e ? uj(e, t) : e.replace(mM, (e, n) => {
63128
+ }, yM = (e, t) => Object.entries(e).reduce((e, [n, r]) => {
63129
+ let i = _M(n, t);
63130
+ return e[typeof i == "string" ? i : String(i)] = _M(r, t), e;
63131
+ }, {}), bM = (e, t) => {
63132
+ let n = e.match(gM);
63133
+ return !n || n.length === 0 ? e : n.length === 1 && n[0] === e ? uj(e, t) : e.replace(gM, (e, n) => {
63134
63134
  let r = uj(e, t);
63135
63135
  return typeof r == "object" && r ? JSON.stringify(r) : r;
63136
63136
  });
63137
63137
  };
63138
63138
  Sp.TABLE, Sp.TABLE, Sp.KANBAN, Sp.KANBAN, Sp.CALENDAR, Sp.CALENDAR, Sp.FIELDS_WIDGET, Sp.FIELDS_WIDGET, Sp.TABLE_WIDGET, Sp.TABLE, Sp.KANBAN_WIDGET, Sp.KANBAN, Sp.CALENDAR_WIDGET, Sp.CALENDAR, Sp.FIELDS_WIDGET, Sp.TABLE_WIDGET, Sp.KANBAN_WIDGET, Sp.CALENDAR_WIDGET;
63139
- var yM = {
63139
+ var xM = {
63140
63140
  darwin: "https://docs.docker.com/desktop/setup/install/mac-install/",
63141
63141
  win32: "https://docs.docker.com/desktop/setup/install/windows-install/",
63142
63142
  linux: "https://docs.docker.com/engine/install/"
63143
- }, bM = () => {
63143
+ }, SM = () => {
63144
63144
  try {
63145
63145
  return d("docker --version", { stdio: "ignore" }), !0;
63146
63146
  } catch {
63147
63147
  return !1;
63148
63148
  }
63149
- }, xM = () => [
63149
+ }, CM = () => [
63150
63150
  " Docker is required but not installed.",
63151
63151
  "",
63152
- ` Install Docker: ${yM[process.platform] ?? yM.linux}`,
63152
+ ` Install Docker: ${xM[process.platform] ?? xM.linux}`,
63153
63153
  "",
63154
63154
  " Then run this command again.",
63155
63155
  "",
63156
63156
  " Alternatively, connect to an existing Twenty instance:",
63157
63157
  " npx create-twenty-app@latest my-twenty-app --url <your-instance-url>"
63158
- ].join("\n"), SM = process.env.INIT_CWD || process.cwd(), CM = "twentycrm/twenty-app-dev:latest", wM = class {
63158
+ ].join("\n"), wM = process.env.INIT_CWD || process.cwd(), TM = "twentycrm/twenty-app-dev:latest", EM = class {
63159
63159
  constructor() {
63160
63160
  this.stepCounter = 0, this.totalSteps = 0;
63161
63161
  }
63162
63162
  async execute(t = {}) {
63163
63163
  let { appName: n, appDisplayName: i, appDirectory: a, appDescription: o } = this.getAppInfos(t), s = t.serverUrl ?? h, c = s !== h;
63164
- !c && !bM() && (console.log(e.yellow("\n" + xM() + "\n")), process.exit(1)), c && t.authenticationMethod === "apiKey" && console.log(e.yellow("API key authentication is only supported on a local Docker instance. Ignoring and switching to OAuth authentication."));
63164
+ !c && !SM() && (console.log(e.yellow("\n" + CM() + "\n")), process.exit(1)), c && t.authenticationMethod === "apiKey" && console.log(e.yellow("API key authentication is only supported on a local Docker instance. Ignoring and switching to OAuth authentication."));
63165
63165
  let l = c ? "oauth" : t.authenticationMethod ?? "apiKey";
63166
63166
  try {
63167
63167
  await this.validateDirectory(a), this.totalSteps = this.computeTotalSteps({ skipLocalInstance: c }), this.stepCounter = 0;
@@ -63206,7 +63206,7 @@ var yM = {
63206
63206
  return {
63207
63207
  appName: t,
63208
63208
  appDisplayName: n,
63209
- appDirectory: e.directory ? i.join(SM, e.directory) : i.join(SM, u(t)),
63209
+ appDirectory: e.directory ? i.join(wM, e.directory) : i.join(wM, u(t)),
63210
63210
  appDescription: r
63211
63211
  };
63212
63212
  }
@@ -63224,7 +63224,7 @@ var yM = {
63224
63224
  }
63225
63225
  pullImageInBackground() {
63226
63226
  return new Promise((e) => {
63227
- let t = f("docker", ["pull", CM], { stdio: "ignore" });
63227
+ let t = f("docker", ["pull", TM], { stdio: "ignore" });
63228
63228
  t.on("close", (t) => e(t === 0)), t.on("error", () => e(!1));
63229
63229
  });
63230
63230
  }
@@ -63259,7 +63259,7 @@ var yM = {
63259
63259
  let r = (await n.json()).data?.currentWorkspace?.workspaceUrls;
63260
63260
  if (!r) return null;
63261
63261
  let i = r.customUrl ?? r.subdomainUrl;
63262
- return i ? uM(i) : null;
63262
+ return i ? fM(i) : null;
63263
63263
  }
63264
63264
  async readMainPageLayoutUniversalIdentifier(e) {
63265
63265
  let t = i.join(e, "src", "constants", "universal-identifiers.ts");
@@ -63370,10 +63370,10 @@ var yM = {
63370
63370
  let o = 1;
63371
63371
  console.log(e.white(` ${o}. Navigate to your project`)), console.log(e.cyan(` cd ${i}\n`)), o++, r || (console.log(e.white(` ${o}. Connect to a Twenty instance`)), console.log(e.cyan(" yarn twenty remote:add --url <your-instance-url>\n")), o++), console.log(e.white(` ${o}. Start developing`)), console.log(e.cyan(" yarn twenty dev\n")), o++, console.log(e.white(` ${o}. Open your twenty instance`)), console.log(e.cyan(` ${n}\n`)), console.log(e.gray(" Documentation: https://docs.twenty.com/developers/extend/apps/getting-started/quick-start"));
63372
63372
  }
63373
- }, TM = new t(re.name).description("CLI tool to initialize a new Twenty application").version(re.version, "-v, --version", "Output the current version of create-twenty-app.").argument("[directory]").option("-n, --name <name>", "Application name").option("-d, --display-name <displayName>", "Application display name").option("--description <description>", "Application description").option("--url <url>", "Twenty server URL (default: http://localhost:2020)").option("--api-url <apiUrl>", "[deprecated: use --url]").option("--authentication-method <method>", "Authentication method: oauth or apiKey (default: apiKey for local, oauth for remote)").helpOption("-h, --help", "Display this help message.").action(async (t, n) => {
63373
+ }, DM = new t(re.name).description("CLI tool to initialize a new Twenty application").version(re.version, "-v, --version", "Output the current version of create-twenty-app.").argument("[directory]").option("-n, --name <name>", "Application name").option("-d, --display-name <displayName>", "Application display name").option("--description <description>", "Application description").option("--url <url>", "Twenty server URL (default: http://localhost:2020)").option("--api-url <apiUrl>", "[deprecated: use --url]").option("--authentication-method <method>", "Authentication method: oauth or apiKey (default: apiKey for local, oauth for remote)").helpOption("-h, --help", "Display this help message.").action(async (t, n) => {
63374
63374
  t && !/^[a-z0-9-]+$/.test(t) && (console.error(e.red(`Invalid directory "${t}". Must contain only lowercase letters, numbers, and hyphens`)), process.exit(1)), n?.name !== void 0 && n.name.trim().length === 0 && (console.error(e.red("Error: --name cannot be empty.")), process.exit(1)), n?.authenticationMethod && !["oauth", "apiKey"].includes(n.authenticationMethod) && (console.error(e.red("Error: --authentication-method must be \"oauth\" or \"apiKey\".")), process.exit(1)), n?.apiUrl && console.warn(e.yellow("Warning: --api-url is deprecated. Use --url instead."));
63375
63375
  let r = (n?.url ?? n?.apiUrl)?.replace(/\/+$/, "");
63376
- await new wM().execute({
63376
+ await new EM().execute({
63377
63377
  directory: t,
63378
63378
  name: n?.name,
63379
63379
  displayName: n?.displayName,
@@ -63382,9 +63382,9 @@ var yM = {
63382
63382
  authenticationMethod: n?.authenticationMethod
63383
63383
  });
63384
63384
  });
63385
- TM.exitOverride();
63385
+ DM.exitOverride();
63386
63386
  try {
63387
- TM.parse();
63387
+ DM.parse();
63388
63388
  } catch (t) {
63389
63389
  t instanceof n && process.exit(t.exitCode), t instanceof Error && (console.error(e.red("Error:"), t.message), process.exit(1));
63390
63390
  }
@@ -43,7 +43,6 @@
43
43
 
44
44
  ## Common Pitfalls
45
45
 
46
- - Creating an object without an index view associated. Unless this is a technical object, user will need to visualize it.
47
46
  - Creating a view without a navigationMenuItem associated. This will make the view available on the left sidebar.
48
47
  - Creating a front-end component that has a scroll instead of being responsive to its fixed widget height and width, unless it is specifically meant to be used in a canvas tab.
49
48
 
@@ -18,7 +18,7 @@ export default definePageLayout({
18
18
  title: 'Overview',
19
19
  position: 0,
20
20
  icon: 'IconApps',
21
- layoutMode: PageLayoutTabLayoutMode.CANVAS,
21
+ layoutMode: PageLayoutTabLayoutMode.VERTICAL_LIST,
22
22
  widgets: [
23
23
  {
24
24
  universalIdentifier: MAIN_PAGE_WIDGET_UNIVERSAL_IDENTIFIER,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-twenty-app",
3
- "version": "2.26.0",
3
+ "version": "2.27.0",
4
4
  "description": "Command-line interface to create Twenty application",
5
5
  "main": "dist/cli.cjs",
6
6
  "bin": "dist/cli.cjs",
@@ -34,7 +34,7 @@
34
34
  "lodash.camelcase": "^4.3.0",
35
35
  "lodash.kebabcase": "^4.1.1",
36
36
  "lodash.startcase": "^4.4.0",
37
- "twenty-sdk": "2.26.0",
37
+ "twenty-sdk": "2.27.0",
38
38
  "uuid": "^13.0.2"
39
39
  },
40
40
  "devDependencies": {