@getrheo/rheo-skill 2.5.0 → 2.6.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/README.md +1 -1
- package/package.json +3 -3
- package/rheo/SKILL.md +3 -3
- package/rheo/rheo-best-practices/SKILL.md +2 -2
- package/rheo/rheo-best-practices/references/implement-workflow.md +1 -1
- package/rheo/rheo-best-practices/references/integrations.md +16 -3
- package/rheo/rheo-best-practices/references/react-native-bare.md +1 -1
- package/rheo/rheo-best-practices/references/react-native-expo.md +2 -2
- package/rheo/rheo-best-practices/references/swiftui.md +2 -0
- package/rheo/rheo-best-practices/references/troubleshooting.md +2 -2
- package/rheo/rheo-flow-import/references/capabilities.md +9 -1
- package/rheo/rheo-flow-import/references/flow-spec.md +11 -1
- package/rheo/rheo-flow-import/references/import-workflow.md +1 -1
- package/rheo/rheo-flow-import/references/manifest-agent-profile-fallback.md +1 -1
- package/rheo/rheo-flow-import/references/manifest-rules.md +1 -1
- package/rheo/rheo-flow-import/references/publish-gates.md +2 -2
- package/rheo/rheo-flow-import/references/react-native-source-patterns.md +3 -1
- package/rheo/rheo-flow-import/references/swiftui-source-patterns.md +2 -0
- package/rheo/rheo-flow-import/scripts/lib/rheo-cli.mjs +1243 -25
|
@@ -4885,6 +4885,22 @@ var FieldKeySchema = external_exports.string().min(1).max(64).regex(FIELD_KEY_RE
|
|
|
4885
4885
|
var FieldClassificationSchema = external_exports.enum(FIELD_CLASSIFICATIONS);
|
|
4886
4886
|
var lazyLayer4 = () => layerSchemaStore.schema;
|
|
4887
4887
|
var EmailPasswordAuthModeSchema = external_exports.enum(EMAIL_PASSWORD_AUTH_MODES);
|
|
4888
|
+
var PasswordRulesSchema = external_exports.object({
|
|
4889
|
+
minLength: external_exports.number().int().min(4).max(128).optional(),
|
|
4890
|
+
maxLength: external_exports.number().int().min(4).max(128).optional(),
|
|
4891
|
+
requireUppercase: external_exports.boolean().optional(),
|
|
4892
|
+
requireLowercase: external_exports.boolean().optional(),
|
|
4893
|
+
requireDigit: external_exports.boolean().optional(),
|
|
4894
|
+
requireSpecial: external_exports.boolean().optional()
|
|
4895
|
+
}).strict().superRefine((data, ctx) => {
|
|
4896
|
+
if (data.minLength !== void 0 && data.maxLength !== void 0 && data.maxLength < data.minLength) {
|
|
4897
|
+
ctx.addIssue({
|
|
4898
|
+
code: external_exports.ZodIssueCode.custom,
|
|
4899
|
+
message: "passwordRules.maxLength must be >= minLength",
|
|
4900
|
+
path: ["maxLength"]
|
|
4901
|
+
});
|
|
4902
|
+
}
|
|
4903
|
+
});
|
|
4888
4904
|
var migrateEmailPasswordAuthIncoming = (raw) => {
|
|
4889
4905
|
if (!raw || typeof raw !== "object") return raw;
|
|
4890
4906
|
const o = raw;
|
|
@@ -5001,7 +5017,10 @@ var EmailPasswordAuthLayerSchemaValidated = external_exports.object({
|
|
|
5001
5017
|
kind: external_exports.literal("email_password_auth"),
|
|
5002
5018
|
mode: EmailPasswordAuthModeSchema,
|
|
5003
5019
|
fieldKey: FieldKeySchema,
|
|
5020
|
+
/** @deprecated Prefer `passwordRules.minLength`. Kept for backward compatibility. */
|
|
5004
5021
|
minPasswordLength: external_exports.number().int().min(4).max(128).optional(),
|
|
5022
|
+
/** Composition rules beyond minimum length (uppercase, digit, special, max). */
|
|
5023
|
+
passwordRules: PasswordRulesSchema.optional(),
|
|
5005
5024
|
children: external_exports.lazy(
|
|
5006
5025
|
() => external_exports.array(external_exports.union([EmailPasswordFieldLayerSchema, EmailPasswordSubmitLayerSchema])).min(1)
|
|
5007
5026
|
),
|
|
@@ -5072,16 +5091,39 @@ var TextInputFieldStyleSchema = external_exports.object({
|
|
|
5072
5091
|
letterSpacing: external_exports.number().min(-0.5).max(1).optional(),
|
|
5073
5092
|
opacity: external_exports.number().min(0).max(1).optional()
|
|
5074
5093
|
}).partial();
|
|
5094
|
+
var TextInputAutoCapitalizeSchema = external_exports.enum([
|
|
5095
|
+
"none",
|
|
5096
|
+
"sentences",
|
|
5097
|
+
"words",
|
|
5098
|
+
"characters"
|
|
5099
|
+
]);
|
|
5100
|
+
var TextInputReturnKeyTypeSchema = external_exports.enum([
|
|
5101
|
+
"done",
|
|
5102
|
+
"next",
|
|
5103
|
+
"go",
|
|
5104
|
+
"send",
|
|
5105
|
+
"search",
|
|
5106
|
+
"default"
|
|
5107
|
+
]);
|
|
5108
|
+
var TextInputValidationModeSchema = external_exports.enum(["onBlur", "onSubmit", "live"]);
|
|
5075
5109
|
var TextInputLayerSchema = external_exports.object({
|
|
5076
5110
|
...baseLayerShape,
|
|
5077
5111
|
kind: external_exports.literal("text_input"),
|
|
5078
5112
|
fieldKey: FieldKeySchema,
|
|
5079
5113
|
placeholder: LocalizedTextSchema.optional(),
|
|
5114
|
+
/** Optional helper copy shown under the field when valid / untouched. */
|
|
5115
|
+
helperText: LocalizedTextSchema.optional(),
|
|
5080
5116
|
inputType: TextInputTypeSchema.optional(),
|
|
5081
5117
|
required: external_exports.boolean().optional(),
|
|
5082
5118
|
minLength: external_exports.number().int().min(0).max(2e3).optional(),
|
|
5083
5119
|
maxLength: external_exports.number().int().positive().max(2e3).optional(),
|
|
5084
5120
|
classification: FieldClassificationSchema,
|
|
5121
|
+
/** Override autocapitalize (defaults from `inputType` when omitted). */
|
|
5122
|
+
autoCapitalize: TextInputAutoCapitalizeSchema.optional(),
|
|
5123
|
+
/** Soft keyboard return key label. */
|
|
5124
|
+
returnKeyType: TextInputReturnKeyTypeSchema.optional(),
|
|
5125
|
+
/** When to show inline validation errors (default `onBlur`). */
|
|
5126
|
+
validationMode: TextInputValidationModeSchema.optional(),
|
|
5085
5127
|
children: external_exports.lazy(() => external_exports.array(lazyLayer5())).optional(),
|
|
5086
5128
|
/** Typography for the native input's typed text. */
|
|
5087
5129
|
fieldStyle: TextInputFieldStyleSchema.optional(),
|
|
@@ -5153,6 +5195,221 @@ var WheelPickerLayerSchema = external_exports.object({
|
|
|
5153
5195
|
style: CommonStyleSchema.optional(),
|
|
5154
5196
|
styleBreakpoints: CommonStyleBreakpointsSchema
|
|
5155
5197
|
});
|
|
5198
|
+
var DATE_TIME_INPUT_MODES = ["date", "time", "datetime"];
|
|
5199
|
+
var NUMBER_STEPPER_BUTTON_ROLES = ["decrement", "increment"];
|
|
5200
|
+
var ADDRESS_INPUT_FIELDS = [
|
|
5201
|
+
"line1",
|
|
5202
|
+
"line2",
|
|
5203
|
+
"city",
|
|
5204
|
+
"region",
|
|
5205
|
+
"postalCode",
|
|
5206
|
+
"country"
|
|
5207
|
+
];
|
|
5208
|
+
var lazyLayer6 = () => layerSchemaStore.schema;
|
|
5209
|
+
var CountryCodeSchema = external_exports.string().length(2).regex(/^[A-Za-z]{2}$/u).transform((s) => s.toUpperCase());
|
|
5210
|
+
var DateTimeInputModeSchema = external_exports.enum(DATE_TIME_INPUT_MODES);
|
|
5211
|
+
var DateTimeInputLayerSchema = external_exports.object({
|
|
5212
|
+
...baseLayerShape,
|
|
5213
|
+
kind: external_exports.literal("date_time_input"),
|
|
5214
|
+
fieldKey: FieldKeySchema,
|
|
5215
|
+
mode: DateTimeInputModeSchema.optional(),
|
|
5216
|
+
required: external_exports.boolean().optional(),
|
|
5217
|
+
min: external_exports.string().min(1).max(64).optional(),
|
|
5218
|
+
max: external_exports.string().min(1).max(64).optional(),
|
|
5219
|
+
defaultValue: external_exports.string().min(1).max(64).optional(),
|
|
5220
|
+
placeholder: LocalizedTextSchema.optional(),
|
|
5221
|
+
classification: FieldClassificationSchema,
|
|
5222
|
+
children: external_exports.lazy(() => external_exports.array(lazyLayer6())).optional(),
|
|
5223
|
+
fieldStyle: TextInputFieldStyleSchema.optional(),
|
|
5224
|
+
style: CommonStyleSchema.optional(),
|
|
5225
|
+
styleBreakpoints: CommonStyleBreakpointsSchema
|
|
5226
|
+
});
|
|
5227
|
+
var NumberStepperButtonRoleSchema = external_exports.enum(NUMBER_STEPPER_BUTTON_ROLES);
|
|
5228
|
+
var NumberStepperButtonLayerSchema = external_exports.object({
|
|
5229
|
+
...baseLayerShape,
|
|
5230
|
+
kind: external_exports.literal("number_stepper_button"),
|
|
5231
|
+
role: NumberStepperButtonRoleSchema,
|
|
5232
|
+
children: external_exports.lazy(() => external_exports.array(lazyLayer6())).optional(),
|
|
5233
|
+
style: CommonStyleSchema.optional(),
|
|
5234
|
+
styleBreakpoints: CommonStyleBreakpointsSchema
|
|
5235
|
+
});
|
|
5236
|
+
var NumberStepperValueLayerSchema = external_exports.object({
|
|
5237
|
+
...baseLayerShape,
|
|
5238
|
+
kind: external_exports.literal("number_stepper_value"),
|
|
5239
|
+
unitLabel: LocalizedTextSchema.optional(),
|
|
5240
|
+
style: TextStyleSchema.optional(),
|
|
5241
|
+
styleBreakpoints: TextStyleBreakpointsSchema
|
|
5242
|
+
});
|
|
5243
|
+
var migrateNumberStepperIncoming = (raw) => {
|
|
5244
|
+
if (!raw || typeof raw !== "object") return raw;
|
|
5245
|
+
const o = raw;
|
|
5246
|
+
if (o.kind !== "number_stepper") return raw;
|
|
5247
|
+
if (Array.isArray(o.children) && o.children.length > 0) return raw;
|
|
5248
|
+
const idBase = typeof o.id === "string" ? o.id : "lyr_number_stepper";
|
|
5249
|
+
const slugRaw = idBase.replace(/^lyr_/i, "").replace(/[^a-z0-9_]/gi, "_");
|
|
5250
|
+
const slug = slugRaw.length > 0 ? slugRaw.slice(0, 40) : "stepper";
|
|
5251
|
+
const valueStyle = o.valueStyle && typeof o.valueStyle === "object" ? o.valueStyle : void 0;
|
|
5252
|
+
const buttonColor = o.buttonColor;
|
|
5253
|
+
const mkButton = (role, glyph) => {
|
|
5254
|
+
const suf = role === "decrement" ? "dec" : "inc";
|
|
5255
|
+
return {
|
|
5256
|
+
id: `lyr_${slug}_btn_${suf}`.slice(0, 64),
|
|
5257
|
+
kind: "number_stepper_button",
|
|
5258
|
+
role,
|
|
5259
|
+
style: {
|
|
5260
|
+
width: 36,
|
|
5261
|
+
height: 36,
|
|
5262
|
+
radius: 8
|
|
5263
|
+
},
|
|
5264
|
+
children: [
|
|
5265
|
+
{
|
|
5266
|
+
id: `lyr_${slug}_btn_${suf}_txt`.slice(0, 64),
|
|
5267
|
+
kind: "text",
|
|
5268
|
+
text: { default: glyph },
|
|
5269
|
+
style: {
|
|
5270
|
+
fontSize: 20,
|
|
5271
|
+
align: "center",
|
|
5272
|
+
...buttonColor !== void 0 ? { color: buttonColor } : {}
|
|
5273
|
+
}
|
|
5274
|
+
}
|
|
5275
|
+
]
|
|
5276
|
+
};
|
|
5277
|
+
};
|
|
5278
|
+
const valueChild = {
|
|
5279
|
+
id: `lyr_${slug}_value`.slice(0, 64),
|
|
5280
|
+
kind: "number_stepper_value",
|
|
5281
|
+
style: {
|
|
5282
|
+
fontSize: typeof valueStyle?.fontSize === "number" ? valueStyle.fontSize : 14,
|
|
5283
|
+
width: "full",
|
|
5284
|
+
...typeof valueStyle?.fontFamily === "string" ? { fontFamily: valueStyle.fontFamily } : {},
|
|
5285
|
+
...typeof valueStyle?.fontWeight === "number" ? { fontWeight: valueStyle.fontWeight } : {},
|
|
5286
|
+
...valueStyle?.color !== void 0 ? { color: valueStyle.color } : {},
|
|
5287
|
+
...typeof valueStyle?.lineHeight === "number" ? { lineHeight: valueStyle.lineHeight } : {},
|
|
5288
|
+
...typeof valueStyle?.letterSpacing === "number" ? { letterSpacing: valueStyle.letterSpacing } : {},
|
|
5289
|
+
...typeof valueStyle?.opacity === "number" ? { opacity: valueStyle.opacity } : {},
|
|
5290
|
+
align: typeof valueStyle?.align === "string" ? valueStyle.align : "center"
|
|
5291
|
+
}
|
|
5292
|
+
};
|
|
5293
|
+
if (o.unitLabel !== void 0) valueChild.unitLabel = o.unitLabel;
|
|
5294
|
+
const {
|
|
5295
|
+
valueStyle: _vs,
|
|
5296
|
+
buttonColor: _bc,
|
|
5297
|
+
unitLabel: _ul,
|
|
5298
|
+
...rest
|
|
5299
|
+
} = o;
|
|
5300
|
+
return {
|
|
5301
|
+
...rest,
|
|
5302
|
+
direction: typeof o.direction === "string" ? o.direction : "horizontal",
|
|
5303
|
+
gap: typeof o.gap === "number" ? o.gap : 12,
|
|
5304
|
+
align: typeof o.align === "string" ? o.align : "center",
|
|
5305
|
+
...typeof o.distribution === "string" ? { distribution: o.distribution } : {},
|
|
5306
|
+
children: [mkButton("decrement", "-"), valueChild, mkButton("increment", "+")]
|
|
5307
|
+
};
|
|
5308
|
+
};
|
|
5309
|
+
var refineNumberStepperChildren = (data, ctx) => {
|
|
5310
|
+
const buttons = data.children.filter((c) => c.kind === "number_stepper_button");
|
|
5311
|
+
const values = data.children.filter((c) => c.kind === "number_stepper_value");
|
|
5312
|
+
const other = data.children.filter(
|
|
5313
|
+
(c) => c.kind !== "number_stepper_button" && c.kind !== "number_stepper_value"
|
|
5314
|
+
);
|
|
5315
|
+
if (other.length > 0) {
|
|
5316
|
+
ctx.addIssue({
|
|
5317
|
+
code: external_exports.ZodIssueCode.custom,
|
|
5318
|
+
message: "number_stepper children must be number_stepper_button or number_stepper_value",
|
|
5319
|
+
path: ["children"]
|
|
5320
|
+
});
|
|
5321
|
+
}
|
|
5322
|
+
const roles = /* @__PURE__ */ new Set();
|
|
5323
|
+
for (const b of buttons) {
|
|
5324
|
+
if (b.kind !== "number_stepper_button") continue;
|
|
5325
|
+
if (roles.has(b.role)) {
|
|
5326
|
+
ctx.addIssue({
|
|
5327
|
+
code: external_exports.ZodIssueCode.custom,
|
|
5328
|
+
message: `duplicate number_stepper_button role "${b.role}"`,
|
|
5329
|
+
path: ["children"]
|
|
5330
|
+
});
|
|
5331
|
+
}
|
|
5332
|
+
roles.add(b.role);
|
|
5333
|
+
}
|
|
5334
|
+
for (const role of NUMBER_STEPPER_BUTTON_ROLES) {
|
|
5335
|
+
if (!roles.has(role)) {
|
|
5336
|
+
ctx.addIssue({
|
|
5337
|
+
code: external_exports.ZodIssueCode.custom,
|
|
5338
|
+
message: `number_stepper requires a number_stepper_button with role "${role}"`,
|
|
5339
|
+
path: ["children"]
|
|
5340
|
+
});
|
|
5341
|
+
}
|
|
5342
|
+
}
|
|
5343
|
+
if (values.length !== 1) {
|
|
5344
|
+
ctx.addIssue({
|
|
5345
|
+
code: external_exports.ZodIssueCode.custom,
|
|
5346
|
+
message: `number_stepper must have exactly one number_stepper_value (found ${values.length})`,
|
|
5347
|
+
path: ["children"]
|
|
5348
|
+
});
|
|
5349
|
+
}
|
|
5350
|
+
};
|
|
5351
|
+
var NumberStepperLayerSchemaValidated = external_exports.object({
|
|
5352
|
+
...baseLayerShape,
|
|
5353
|
+
kind: external_exports.literal("number_stepper"),
|
|
5354
|
+
fieldKey: FieldKeySchema,
|
|
5355
|
+
min: external_exports.number(),
|
|
5356
|
+
max: external_exports.number(),
|
|
5357
|
+
step: external_exports.number().positive().optional(),
|
|
5358
|
+
defaultValue: external_exports.number().optional(),
|
|
5359
|
+
classification: FieldClassificationSchema,
|
|
5360
|
+
direction: external_exports.enum(["vertical", "horizontal"]).optional(),
|
|
5361
|
+
gap: external_exports.number().int().min(0).max(64).optional(),
|
|
5362
|
+
align: external_exports.enum(["start", "center", "end", "stretch"]).optional(),
|
|
5363
|
+
distribution: external_exports.enum(["start", "center", "end", "between", "around"]).optional(),
|
|
5364
|
+
children: external_exports.lazy(
|
|
5365
|
+
() => external_exports.array(external_exports.union([NumberStepperButtonLayerSchema, NumberStepperValueLayerSchema])).min(1)
|
|
5366
|
+
),
|
|
5367
|
+
style: CommonStyleSchema.optional(),
|
|
5368
|
+
styleBreakpoints: CommonStyleBreakpointsSchema
|
|
5369
|
+
}).superRefine(refineNumberStepperChildren);
|
|
5370
|
+
var NumberStepperLayerSchema = external_exports.preprocess(
|
|
5371
|
+
migrateNumberStepperIncoming,
|
|
5372
|
+
NumberStepperLayerSchemaValidated
|
|
5373
|
+
);
|
|
5374
|
+
var PhoneInputLayerSchema = external_exports.object({
|
|
5375
|
+
...baseLayerShape,
|
|
5376
|
+
kind: external_exports.literal("phone_input"),
|
|
5377
|
+
fieldKey: FieldKeySchema,
|
|
5378
|
+
defaultCountryCode: CountryCodeSchema.optional(),
|
|
5379
|
+
allowedCountryCodes: external_exports.array(CountryCodeSchema).min(1).max(250).optional(),
|
|
5380
|
+
required: external_exports.boolean().optional(),
|
|
5381
|
+
placeholder: LocalizedTextSchema.optional(),
|
|
5382
|
+
classification: FieldClassificationSchema,
|
|
5383
|
+
children: external_exports.lazy(() => external_exports.array(lazyLayer6())).optional(),
|
|
5384
|
+
fieldStyle: TextInputFieldStyleSchema.optional(),
|
|
5385
|
+
style: CommonStyleSchema.optional(),
|
|
5386
|
+
styleBreakpoints: CommonStyleBreakpointsSchema
|
|
5387
|
+
});
|
|
5388
|
+
var AddressInputFieldSchema = external_exports.enum(ADDRESS_INPUT_FIELDS);
|
|
5389
|
+
var AddressInputPlaceholdersSchema = external_exports.object({
|
|
5390
|
+
line1: LocalizedTextSchema.optional(),
|
|
5391
|
+
line2: LocalizedTextSchema.optional(),
|
|
5392
|
+
city: LocalizedTextSchema.optional(),
|
|
5393
|
+
region: LocalizedTextSchema.optional(),
|
|
5394
|
+
postalCode: LocalizedTextSchema.optional(),
|
|
5395
|
+
country: LocalizedTextSchema.optional()
|
|
5396
|
+
}).partial();
|
|
5397
|
+
var AddressInputLayerSchema = external_exports.object({
|
|
5398
|
+
...baseLayerShape,
|
|
5399
|
+
kind: external_exports.literal("address_input"),
|
|
5400
|
+
fieldKey: FieldKeySchema,
|
|
5401
|
+
requiredFields: external_exports.array(AddressInputFieldSchema).min(1).max(6).optional(),
|
|
5402
|
+
showLine2: external_exports.boolean().optional(),
|
|
5403
|
+
showRegion: external_exports.boolean().optional(),
|
|
5404
|
+
defaultCountryCode: CountryCodeSchema.optional(),
|
|
5405
|
+
placeholders: AddressInputPlaceholdersSchema.optional(),
|
|
5406
|
+
classification: FieldClassificationSchema,
|
|
5407
|
+
children: external_exports.lazy(() => external_exports.array(lazyLayer6())).optional(),
|
|
5408
|
+
fieldStyle: TextInputFieldStyleSchema.optional(),
|
|
5409
|
+
gap: external_exports.number().int().min(0).max(64).optional(),
|
|
5410
|
+
style: CommonStyleSchema.optional(),
|
|
5411
|
+
styleBreakpoints: CommonStyleBreakpointsSchema
|
|
5412
|
+
});
|
|
5156
5413
|
var CarouselIndicatorsStyleSchema = external_exports.object({
|
|
5157
5414
|
width: external_exports.number().int().min(1).max(64).optional(),
|
|
5158
5415
|
height: external_exports.number().int().min(1).max(64).optional(),
|
|
@@ -5287,6 +5544,12 @@ layerSchemaStore.schema = external_exports.lazy(
|
|
|
5287
5544
|
TextInputLayerSchema,
|
|
5288
5545
|
ScaleInputLayerSchema,
|
|
5289
5546
|
WheelPickerLayerSchema,
|
|
5547
|
+
DateTimeInputLayerSchema,
|
|
5548
|
+
NumberStepperLayerSchema,
|
|
5549
|
+
NumberStepperButtonLayerSchema,
|
|
5550
|
+
NumberStepperValueLayerSchema,
|
|
5551
|
+
PhoneInputLayerSchema,
|
|
5552
|
+
AddressInputLayerSchema,
|
|
5290
5553
|
OAuthLoginLayerSchema,
|
|
5291
5554
|
OAuthProviderPresetLayerSchema,
|
|
5292
5555
|
OAuthProviderCustomLayerSchema,
|
|
@@ -5298,7 +5561,17 @@ layerSchemaStore.schema = external_exports.lazy(
|
|
|
5298
5561
|
])
|
|
5299
5562
|
);
|
|
5300
5563
|
var LayerSchema = layerSchemaStore.schema;
|
|
5301
|
-
var
|
|
5564
|
+
var MANUAL_SUBMIT_INPUT_KINDS = [
|
|
5565
|
+
"multiple_choice",
|
|
5566
|
+
"text_input",
|
|
5567
|
+
"scale_input",
|
|
5568
|
+
"wheel_picker",
|
|
5569
|
+
"date_time_input",
|
|
5570
|
+
"number_stepper",
|
|
5571
|
+
"phone_input",
|
|
5572
|
+
"address_input"
|
|
5573
|
+
];
|
|
5574
|
+
var isInputLayer = (l) => l.kind === "single_choice" || l.kind === "multiple_choice" || l.kind === "text_input" || l.kind === "scale_input" || l.kind === "wheel_picker" || l.kind === "date_time_input" || l.kind === "number_stepper" || l.kind === "phone_input" || l.kind === "address_input";
|
|
5302
5575
|
|
|
5303
5576
|
// ../../node_modules/@getrheo/contracts/dist/localized.js
|
|
5304
5577
|
var LocaleCode2 = external_exports.string().regex(/^[a-z]{2}(-[A-Z]{2})?$/, 'locale must be like "en" or "en-US"');
|
|
@@ -5733,11 +6006,11 @@ var OAuthPresetButtonChromeBreakpointsSchema2 = external_exports.object({
|
|
|
5733
6006
|
}).partial().optional();
|
|
5734
6007
|
var EMAIL_PASSWORD_AUTH_MODES2 = ["sign_in", "sign_up"];
|
|
5735
6008
|
var EMAIL_PASSWORD_SLOTS2 = ["email", "password", "confirm"];
|
|
5736
|
-
var
|
|
6009
|
+
var lazyLayer7 = () => layerSchemaStore2.schema;
|
|
5737
6010
|
var ButtonLayerSchema2 = external_exports.object({
|
|
5738
6011
|
...baseLayerShape2,
|
|
5739
6012
|
kind: external_exports.literal("button"),
|
|
5740
|
-
children: external_exports.lazy(() => external_exports.array(
|
|
6013
|
+
children: external_exports.lazy(() => external_exports.array(lazyLayer7())),
|
|
5741
6014
|
action: ButtonActionSchema2,
|
|
5742
6015
|
variant: ButtonLayerVariantSchema2,
|
|
5743
6016
|
direction: external_exports.enum(["vertical", "horizontal"]).optional(),
|
|
@@ -5751,7 +6024,7 @@ var ButtonLayerSchema2 = external_exports.object({
|
|
|
5751
6024
|
var BackButtonLayerSchema2 = external_exports.object({
|
|
5752
6025
|
...baseLayerShape2,
|
|
5753
6026
|
kind: external_exports.literal("back_button"),
|
|
5754
|
-
children: external_exports.lazy(() => external_exports.array(
|
|
6027
|
+
children: external_exports.lazy(() => external_exports.array(lazyLayer7())),
|
|
5755
6028
|
variant: ButtonLayerVariantSchema2,
|
|
5756
6029
|
direction: external_exports.enum(["vertical", "horizontal"]).optional(),
|
|
5757
6030
|
gap: external_exports.number().int().min(0).optional(),
|
|
@@ -6138,6 +6411,22 @@ var FieldKeySchema2 = external_exports.string().min(1).max(64).regex(FIELD_KEY_R
|
|
|
6138
6411
|
var FieldClassificationSchema2 = external_exports.enum(FIELD_CLASSIFICATIONS2);
|
|
6139
6412
|
var lazyLayer42 = () => layerSchemaStore2.schema;
|
|
6140
6413
|
var EmailPasswordAuthModeSchema2 = external_exports.enum(EMAIL_PASSWORD_AUTH_MODES2);
|
|
6414
|
+
var PasswordRulesSchema2 = external_exports.object({
|
|
6415
|
+
minLength: external_exports.number().int().min(4).max(128).optional(),
|
|
6416
|
+
maxLength: external_exports.number().int().min(4).max(128).optional(),
|
|
6417
|
+
requireUppercase: external_exports.boolean().optional(),
|
|
6418
|
+
requireLowercase: external_exports.boolean().optional(),
|
|
6419
|
+
requireDigit: external_exports.boolean().optional(),
|
|
6420
|
+
requireSpecial: external_exports.boolean().optional()
|
|
6421
|
+
}).strict().superRefine((data, ctx) => {
|
|
6422
|
+
if (data.minLength !== void 0 && data.maxLength !== void 0 && data.maxLength < data.minLength) {
|
|
6423
|
+
ctx.addIssue({
|
|
6424
|
+
code: external_exports.ZodIssueCode.custom,
|
|
6425
|
+
message: "passwordRules.maxLength must be >= minLength",
|
|
6426
|
+
path: ["maxLength"]
|
|
6427
|
+
});
|
|
6428
|
+
}
|
|
6429
|
+
});
|
|
6141
6430
|
var migrateEmailPasswordAuthIncoming2 = (raw) => {
|
|
6142
6431
|
if (!raw || typeof raw !== "object") return raw;
|
|
6143
6432
|
const o = raw;
|
|
@@ -6254,7 +6543,10 @@ var EmailPasswordAuthLayerSchemaValidated2 = external_exports.object({
|
|
|
6254
6543
|
kind: external_exports.literal("email_password_auth"),
|
|
6255
6544
|
mode: EmailPasswordAuthModeSchema2,
|
|
6256
6545
|
fieldKey: FieldKeySchema2,
|
|
6546
|
+
/** @deprecated Prefer `passwordRules.minLength`. Kept for backward compatibility. */
|
|
6257
6547
|
minPasswordLength: external_exports.number().int().min(4).max(128).optional(),
|
|
6548
|
+
/** Composition rules beyond minimum length (uppercase, digit, special, max). */
|
|
6549
|
+
passwordRules: PasswordRulesSchema2.optional(),
|
|
6258
6550
|
children: external_exports.lazy(
|
|
6259
6551
|
() => external_exports.array(external_exports.union([EmailPasswordFieldLayerSchema2, EmailPasswordSubmitLayerSchema2])).min(1)
|
|
6260
6552
|
),
|
|
@@ -6325,16 +6617,39 @@ var TextInputFieldStyleSchema2 = external_exports.object({
|
|
|
6325
6617
|
letterSpacing: external_exports.number().min(-0.5).max(1).optional(),
|
|
6326
6618
|
opacity: external_exports.number().min(0).max(1).optional()
|
|
6327
6619
|
}).partial();
|
|
6620
|
+
var TextInputAutoCapitalizeSchema2 = external_exports.enum([
|
|
6621
|
+
"none",
|
|
6622
|
+
"sentences",
|
|
6623
|
+
"words",
|
|
6624
|
+
"characters"
|
|
6625
|
+
]);
|
|
6626
|
+
var TextInputReturnKeyTypeSchema2 = external_exports.enum([
|
|
6627
|
+
"done",
|
|
6628
|
+
"next",
|
|
6629
|
+
"go",
|
|
6630
|
+
"send",
|
|
6631
|
+
"search",
|
|
6632
|
+
"default"
|
|
6633
|
+
]);
|
|
6634
|
+
var TextInputValidationModeSchema2 = external_exports.enum(["onBlur", "onSubmit", "live"]);
|
|
6328
6635
|
var TextInputLayerSchema2 = external_exports.object({
|
|
6329
6636
|
...baseLayerShape2,
|
|
6330
6637
|
kind: external_exports.literal("text_input"),
|
|
6331
6638
|
fieldKey: FieldKeySchema2,
|
|
6332
6639
|
placeholder: LocalizedTextSchema3.optional(),
|
|
6640
|
+
/** Optional helper copy shown under the field when valid / untouched. */
|
|
6641
|
+
helperText: LocalizedTextSchema3.optional(),
|
|
6333
6642
|
inputType: TextInputTypeSchema2.optional(),
|
|
6334
6643
|
required: external_exports.boolean().optional(),
|
|
6335
6644
|
minLength: external_exports.number().int().min(0).max(2e3).optional(),
|
|
6336
6645
|
maxLength: external_exports.number().int().positive().max(2e3).optional(),
|
|
6337
6646
|
classification: FieldClassificationSchema2,
|
|
6647
|
+
/** Override autocapitalize (defaults from `inputType` when omitted). */
|
|
6648
|
+
autoCapitalize: TextInputAutoCapitalizeSchema2.optional(),
|
|
6649
|
+
/** Soft keyboard return key label. */
|
|
6650
|
+
returnKeyType: TextInputReturnKeyTypeSchema2.optional(),
|
|
6651
|
+
/** When to show inline validation errors (default `onBlur`). */
|
|
6652
|
+
validationMode: TextInputValidationModeSchema2.optional(),
|
|
6338
6653
|
children: external_exports.lazy(() => external_exports.array(lazyLayer52())).optional(),
|
|
6339
6654
|
/** Typography for the native input's typed text. */
|
|
6340
6655
|
fieldStyle: TextInputFieldStyleSchema2.optional(),
|
|
@@ -6406,6 +6721,221 @@ var WheelPickerLayerSchema2 = external_exports.object({
|
|
|
6406
6721
|
style: CommonStyleSchema2.optional(),
|
|
6407
6722
|
styleBreakpoints: CommonStyleBreakpointsSchema2
|
|
6408
6723
|
});
|
|
6724
|
+
var DATE_TIME_INPUT_MODES2 = ["date", "time", "datetime"];
|
|
6725
|
+
var NUMBER_STEPPER_BUTTON_ROLES2 = ["decrement", "increment"];
|
|
6726
|
+
var ADDRESS_INPUT_FIELDS2 = [
|
|
6727
|
+
"line1",
|
|
6728
|
+
"line2",
|
|
6729
|
+
"city",
|
|
6730
|
+
"region",
|
|
6731
|
+
"postalCode",
|
|
6732
|
+
"country"
|
|
6733
|
+
];
|
|
6734
|
+
var lazyLayer62 = () => layerSchemaStore2.schema;
|
|
6735
|
+
var CountryCodeSchema2 = external_exports.string().length(2).regex(/^[A-Za-z]{2}$/u).transform((s) => s.toUpperCase());
|
|
6736
|
+
var DateTimeInputModeSchema2 = external_exports.enum(DATE_TIME_INPUT_MODES2);
|
|
6737
|
+
var DateTimeInputLayerSchema2 = external_exports.object({
|
|
6738
|
+
...baseLayerShape2,
|
|
6739
|
+
kind: external_exports.literal("date_time_input"),
|
|
6740
|
+
fieldKey: FieldKeySchema2,
|
|
6741
|
+
mode: DateTimeInputModeSchema2.optional(),
|
|
6742
|
+
required: external_exports.boolean().optional(),
|
|
6743
|
+
min: external_exports.string().min(1).max(64).optional(),
|
|
6744
|
+
max: external_exports.string().min(1).max(64).optional(),
|
|
6745
|
+
defaultValue: external_exports.string().min(1).max(64).optional(),
|
|
6746
|
+
placeholder: LocalizedTextSchema3.optional(),
|
|
6747
|
+
classification: FieldClassificationSchema2,
|
|
6748
|
+
children: external_exports.lazy(() => external_exports.array(lazyLayer62())).optional(),
|
|
6749
|
+
fieldStyle: TextInputFieldStyleSchema2.optional(),
|
|
6750
|
+
style: CommonStyleSchema2.optional(),
|
|
6751
|
+
styleBreakpoints: CommonStyleBreakpointsSchema2
|
|
6752
|
+
});
|
|
6753
|
+
var NumberStepperButtonRoleSchema2 = external_exports.enum(NUMBER_STEPPER_BUTTON_ROLES2);
|
|
6754
|
+
var NumberStepperButtonLayerSchema2 = external_exports.object({
|
|
6755
|
+
...baseLayerShape2,
|
|
6756
|
+
kind: external_exports.literal("number_stepper_button"),
|
|
6757
|
+
role: NumberStepperButtonRoleSchema2,
|
|
6758
|
+
children: external_exports.lazy(() => external_exports.array(lazyLayer62())).optional(),
|
|
6759
|
+
style: CommonStyleSchema2.optional(),
|
|
6760
|
+
styleBreakpoints: CommonStyleBreakpointsSchema2
|
|
6761
|
+
});
|
|
6762
|
+
var NumberStepperValueLayerSchema2 = external_exports.object({
|
|
6763
|
+
...baseLayerShape2,
|
|
6764
|
+
kind: external_exports.literal("number_stepper_value"),
|
|
6765
|
+
unitLabel: LocalizedTextSchema3.optional(),
|
|
6766
|
+
style: TextStyleSchema2.optional(),
|
|
6767
|
+
styleBreakpoints: TextStyleBreakpointsSchema2
|
|
6768
|
+
});
|
|
6769
|
+
var migrateNumberStepperIncoming2 = (raw) => {
|
|
6770
|
+
if (!raw || typeof raw !== "object") return raw;
|
|
6771
|
+
const o = raw;
|
|
6772
|
+
if (o.kind !== "number_stepper") return raw;
|
|
6773
|
+
if (Array.isArray(o.children) && o.children.length > 0) return raw;
|
|
6774
|
+
const idBase = typeof o.id === "string" ? o.id : "lyr_number_stepper";
|
|
6775
|
+
const slugRaw = idBase.replace(/^lyr_/i, "").replace(/[^a-z0-9_]/gi, "_");
|
|
6776
|
+
const slug = slugRaw.length > 0 ? slugRaw.slice(0, 40) : "stepper";
|
|
6777
|
+
const valueStyle = o.valueStyle && typeof o.valueStyle === "object" ? o.valueStyle : void 0;
|
|
6778
|
+
const buttonColor = o.buttonColor;
|
|
6779
|
+
const mkButton = (role, glyph) => {
|
|
6780
|
+
const suf = role === "decrement" ? "dec" : "inc";
|
|
6781
|
+
return {
|
|
6782
|
+
id: `lyr_${slug}_btn_${suf}`.slice(0, 64),
|
|
6783
|
+
kind: "number_stepper_button",
|
|
6784
|
+
role,
|
|
6785
|
+
style: {
|
|
6786
|
+
width: 36,
|
|
6787
|
+
height: 36,
|
|
6788
|
+
radius: 8
|
|
6789
|
+
},
|
|
6790
|
+
children: [
|
|
6791
|
+
{
|
|
6792
|
+
id: `lyr_${slug}_btn_${suf}_txt`.slice(0, 64),
|
|
6793
|
+
kind: "text",
|
|
6794
|
+
text: { default: glyph },
|
|
6795
|
+
style: {
|
|
6796
|
+
fontSize: 20,
|
|
6797
|
+
align: "center",
|
|
6798
|
+
...buttonColor !== void 0 ? { color: buttonColor } : {}
|
|
6799
|
+
}
|
|
6800
|
+
}
|
|
6801
|
+
]
|
|
6802
|
+
};
|
|
6803
|
+
};
|
|
6804
|
+
const valueChild = {
|
|
6805
|
+
id: `lyr_${slug}_value`.slice(0, 64),
|
|
6806
|
+
kind: "number_stepper_value",
|
|
6807
|
+
style: {
|
|
6808
|
+
fontSize: typeof valueStyle?.fontSize === "number" ? valueStyle.fontSize : 14,
|
|
6809
|
+
width: "full",
|
|
6810
|
+
...typeof valueStyle?.fontFamily === "string" ? { fontFamily: valueStyle.fontFamily } : {},
|
|
6811
|
+
...typeof valueStyle?.fontWeight === "number" ? { fontWeight: valueStyle.fontWeight } : {},
|
|
6812
|
+
...valueStyle?.color !== void 0 ? { color: valueStyle.color } : {},
|
|
6813
|
+
...typeof valueStyle?.lineHeight === "number" ? { lineHeight: valueStyle.lineHeight } : {},
|
|
6814
|
+
...typeof valueStyle?.letterSpacing === "number" ? { letterSpacing: valueStyle.letterSpacing } : {},
|
|
6815
|
+
...typeof valueStyle?.opacity === "number" ? { opacity: valueStyle.opacity } : {},
|
|
6816
|
+
align: typeof valueStyle?.align === "string" ? valueStyle.align : "center"
|
|
6817
|
+
}
|
|
6818
|
+
};
|
|
6819
|
+
if (o.unitLabel !== void 0) valueChild.unitLabel = o.unitLabel;
|
|
6820
|
+
const {
|
|
6821
|
+
valueStyle: _vs,
|
|
6822
|
+
buttonColor: _bc,
|
|
6823
|
+
unitLabel: _ul,
|
|
6824
|
+
...rest
|
|
6825
|
+
} = o;
|
|
6826
|
+
return {
|
|
6827
|
+
...rest,
|
|
6828
|
+
direction: typeof o.direction === "string" ? o.direction : "horizontal",
|
|
6829
|
+
gap: typeof o.gap === "number" ? o.gap : 12,
|
|
6830
|
+
align: typeof o.align === "string" ? o.align : "center",
|
|
6831
|
+
...typeof o.distribution === "string" ? { distribution: o.distribution } : {},
|
|
6832
|
+
children: [mkButton("decrement", "-"), valueChild, mkButton("increment", "+")]
|
|
6833
|
+
};
|
|
6834
|
+
};
|
|
6835
|
+
var refineNumberStepperChildren2 = (data, ctx) => {
|
|
6836
|
+
const buttons = data.children.filter((c) => c.kind === "number_stepper_button");
|
|
6837
|
+
const values = data.children.filter((c) => c.kind === "number_stepper_value");
|
|
6838
|
+
const other = data.children.filter(
|
|
6839
|
+
(c) => c.kind !== "number_stepper_button" && c.kind !== "number_stepper_value"
|
|
6840
|
+
);
|
|
6841
|
+
if (other.length > 0) {
|
|
6842
|
+
ctx.addIssue({
|
|
6843
|
+
code: external_exports.ZodIssueCode.custom,
|
|
6844
|
+
message: "number_stepper children must be number_stepper_button or number_stepper_value",
|
|
6845
|
+
path: ["children"]
|
|
6846
|
+
});
|
|
6847
|
+
}
|
|
6848
|
+
const roles = /* @__PURE__ */ new Set();
|
|
6849
|
+
for (const b of buttons) {
|
|
6850
|
+
if (b.kind !== "number_stepper_button") continue;
|
|
6851
|
+
if (roles.has(b.role)) {
|
|
6852
|
+
ctx.addIssue({
|
|
6853
|
+
code: external_exports.ZodIssueCode.custom,
|
|
6854
|
+
message: `duplicate number_stepper_button role "${b.role}"`,
|
|
6855
|
+
path: ["children"]
|
|
6856
|
+
});
|
|
6857
|
+
}
|
|
6858
|
+
roles.add(b.role);
|
|
6859
|
+
}
|
|
6860
|
+
for (const role of NUMBER_STEPPER_BUTTON_ROLES2) {
|
|
6861
|
+
if (!roles.has(role)) {
|
|
6862
|
+
ctx.addIssue({
|
|
6863
|
+
code: external_exports.ZodIssueCode.custom,
|
|
6864
|
+
message: `number_stepper requires a number_stepper_button with role "${role}"`,
|
|
6865
|
+
path: ["children"]
|
|
6866
|
+
});
|
|
6867
|
+
}
|
|
6868
|
+
}
|
|
6869
|
+
if (values.length !== 1) {
|
|
6870
|
+
ctx.addIssue({
|
|
6871
|
+
code: external_exports.ZodIssueCode.custom,
|
|
6872
|
+
message: `number_stepper must have exactly one number_stepper_value (found ${values.length})`,
|
|
6873
|
+
path: ["children"]
|
|
6874
|
+
});
|
|
6875
|
+
}
|
|
6876
|
+
};
|
|
6877
|
+
var NumberStepperLayerSchemaValidated2 = external_exports.object({
|
|
6878
|
+
...baseLayerShape2,
|
|
6879
|
+
kind: external_exports.literal("number_stepper"),
|
|
6880
|
+
fieldKey: FieldKeySchema2,
|
|
6881
|
+
min: external_exports.number(),
|
|
6882
|
+
max: external_exports.number(),
|
|
6883
|
+
step: external_exports.number().positive().optional(),
|
|
6884
|
+
defaultValue: external_exports.number().optional(),
|
|
6885
|
+
classification: FieldClassificationSchema2,
|
|
6886
|
+
direction: external_exports.enum(["vertical", "horizontal"]).optional(),
|
|
6887
|
+
gap: external_exports.number().int().min(0).max(64).optional(),
|
|
6888
|
+
align: external_exports.enum(["start", "center", "end", "stretch"]).optional(),
|
|
6889
|
+
distribution: external_exports.enum(["start", "center", "end", "between", "around"]).optional(),
|
|
6890
|
+
children: external_exports.lazy(
|
|
6891
|
+
() => external_exports.array(external_exports.union([NumberStepperButtonLayerSchema2, NumberStepperValueLayerSchema2])).min(1)
|
|
6892
|
+
),
|
|
6893
|
+
style: CommonStyleSchema2.optional(),
|
|
6894
|
+
styleBreakpoints: CommonStyleBreakpointsSchema2
|
|
6895
|
+
}).superRefine(refineNumberStepperChildren2);
|
|
6896
|
+
var NumberStepperLayerSchema2 = external_exports.preprocess(
|
|
6897
|
+
migrateNumberStepperIncoming2,
|
|
6898
|
+
NumberStepperLayerSchemaValidated2
|
|
6899
|
+
);
|
|
6900
|
+
var PhoneInputLayerSchema2 = external_exports.object({
|
|
6901
|
+
...baseLayerShape2,
|
|
6902
|
+
kind: external_exports.literal("phone_input"),
|
|
6903
|
+
fieldKey: FieldKeySchema2,
|
|
6904
|
+
defaultCountryCode: CountryCodeSchema2.optional(),
|
|
6905
|
+
allowedCountryCodes: external_exports.array(CountryCodeSchema2).min(1).max(250).optional(),
|
|
6906
|
+
required: external_exports.boolean().optional(),
|
|
6907
|
+
placeholder: LocalizedTextSchema3.optional(),
|
|
6908
|
+
classification: FieldClassificationSchema2,
|
|
6909
|
+
children: external_exports.lazy(() => external_exports.array(lazyLayer62())).optional(),
|
|
6910
|
+
fieldStyle: TextInputFieldStyleSchema2.optional(),
|
|
6911
|
+
style: CommonStyleSchema2.optional(),
|
|
6912
|
+
styleBreakpoints: CommonStyleBreakpointsSchema2
|
|
6913
|
+
});
|
|
6914
|
+
var AddressInputFieldSchema2 = external_exports.enum(ADDRESS_INPUT_FIELDS2);
|
|
6915
|
+
var AddressInputPlaceholdersSchema2 = external_exports.object({
|
|
6916
|
+
line1: LocalizedTextSchema3.optional(),
|
|
6917
|
+
line2: LocalizedTextSchema3.optional(),
|
|
6918
|
+
city: LocalizedTextSchema3.optional(),
|
|
6919
|
+
region: LocalizedTextSchema3.optional(),
|
|
6920
|
+
postalCode: LocalizedTextSchema3.optional(),
|
|
6921
|
+
country: LocalizedTextSchema3.optional()
|
|
6922
|
+
}).partial();
|
|
6923
|
+
var AddressInputLayerSchema2 = external_exports.object({
|
|
6924
|
+
...baseLayerShape2,
|
|
6925
|
+
kind: external_exports.literal("address_input"),
|
|
6926
|
+
fieldKey: FieldKeySchema2,
|
|
6927
|
+
requiredFields: external_exports.array(AddressInputFieldSchema2).min(1).max(6).optional(),
|
|
6928
|
+
showLine2: external_exports.boolean().optional(),
|
|
6929
|
+
showRegion: external_exports.boolean().optional(),
|
|
6930
|
+
defaultCountryCode: CountryCodeSchema2.optional(),
|
|
6931
|
+
placeholders: AddressInputPlaceholdersSchema2.optional(),
|
|
6932
|
+
classification: FieldClassificationSchema2,
|
|
6933
|
+
children: external_exports.lazy(() => external_exports.array(lazyLayer62())).optional(),
|
|
6934
|
+
fieldStyle: TextInputFieldStyleSchema2.optional(),
|
|
6935
|
+
gap: external_exports.number().int().min(0).max(64).optional(),
|
|
6936
|
+
style: CommonStyleSchema2.optional(),
|
|
6937
|
+
styleBreakpoints: CommonStyleBreakpointsSchema2
|
|
6938
|
+
});
|
|
6409
6939
|
var CarouselIndicatorsStyleSchema2 = external_exports.object({
|
|
6410
6940
|
width: external_exports.number().int().min(1).max(64).optional(),
|
|
6411
6941
|
height: external_exports.number().int().min(1).max(64).optional(),
|
|
@@ -6558,6 +7088,12 @@ layerSchemaStore2.schema = external_exports.lazy(
|
|
|
6558
7088
|
TextInputLayerSchema2,
|
|
6559
7089
|
ScaleInputLayerSchema2,
|
|
6560
7090
|
WheelPickerLayerSchema2,
|
|
7091
|
+
DateTimeInputLayerSchema2,
|
|
7092
|
+
NumberStepperLayerSchema2,
|
|
7093
|
+
NumberStepperButtonLayerSchema2,
|
|
7094
|
+
NumberStepperValueLayerSchema2,
|
|
7095
|
+
PhoneInputLayerSchema2,
|
|
7096
|
+
AddressInputLayerSchema2,
|
|
6561
7097
|
OAuthLoginLayerSchema2,
|
|
6562
7098
|
OAuthProviderPresetLayerSchema2,
|
|
6563
7099
|
OAuthProviderCustomLayerSchema2,
|
|
@@ -7049,11 +7585,11 @@ var OAuthPresetButtonChromeBreakpointsSchema3 = external_exports.object({
|
|
|
7049
7585
|
}).partial().optional();
|
|
7050
7586
|
var EMAIL_PASSWORD_AUTH_MODES3 = ["sign_in", "sign_up"];
|
|
7051
7587
|
var EMAIL_PASSWORD_SLOTS3 = ["email", "password", "confirm"];
|
|
7052
|
-
var
|
|
7588
|
+
var lazyLayer8 = () => layerSchemaStore3.schema;
|
|
7053
7589
|
var ButtonLayerSchema3 = external_exports.object({
|
|
7054
7590
|
...baseLayerShape3,
|
|
7055
7591
|
kind: external_exports.literal("button"),
|
|
7056
|
-
children: external_exports.lazy(() => external_exports.array(
|
|
7592
|
+
children: external_exports.lazy(() => external_exports.array(lazyLayer8())),
|
|
7057
7593
|
action: ButtonActionSchema3,
|
|
7058
7594
|
variant: ButtonLayerVariantSchema3,
|
|
7059
7595
|
direction: external_exports.enum(["vertical", "horizontal"]).optional(),
|
|
@@ -7067,7 +7603,7 @@ var ButtonLayerSchema3 = external_exports.object({
|
|
|
7067
7603
|
var BackButtonLayerSchema3 = external_exports.object({
|
|
7068
7604
|
...baseLayerShape3,
|
|
7069
7605
|
kind: external_exports.literal("back_button"),
|
|
7070
|
-
children: external_exports.lazy(() => external_exports.array(
|
|
7606
|
+
children: external_exports.lazy(() => external_exports.array(lazyLayer8())),
|
|
7071
7607
|
variant: ButtonLayerVariantSchema3,
|
|
7072
7608
|
direction: external_exports.enum(["vertical", "horizontal"]).optional(),
|
|
7073
7609
|
gap: external_exports.number().int().min(0).optional(),
|
|
@@ -7451,6 +7987,22 @@ var OAuthLoginProvidersArraySchema2 = external_exports.array(OAuthLoginProviderS
|
|
|
7451
7987
|
});
|
|
7452
7988
|
var lazyLayer43 = () => layerSchemaStore3.schema;
|
|
7453
7989
|
var EmailPasswordAuthModeSchema3 = external_exports.enum(EMAIL_PASSWORD_AUTH_MODES3);
|
|
7990
|
+
var PasswordRulesSchema3 = external_exports.object({
|
|
7991
|
+
minLength: external_exports.number().int().min(4).max(128).optional(),
|
|
7992
|
+
maxLength: external_exports.number().int().min(4).max(128).optional(),
|
|
7993
|
+
requireUppercase: external_exports.boolean().optional(),
|
|
7994
|
+
requireLowercase: external_exports.boolean().optional(),
|
|
7995
|
+
requireDigit: external_exports.boolean().optional(),
|
|
7996
|
+
requireSpecial: external_exports.boolean().optional()
|
|
7997
|
+
}).strict().superRefine((data, ctx) => {
|
|
7998
|
+
if (data.minLength !== void 0 && data.maxLength !== void 0 && data.maxLength < data.minLength) {
|
|
7999
|
+
ctx.addIssue({
|
|
8000
|
+
code: external_exports.ZodIssueCode.custom,
|
|
8001
|
+
message: "passwordRules.maxLength must be >= minLength",
|
|
8002
|
+
path: ["maxLength"]
|
|
8003
|
+
});
|
|
8004
|
+
}
|
|
8005
|
+
});
|
|
7454
8006
|
var migrateEmailPasswordAuthIncoming3 = (raw) => {
|
|
7455
8007
|
if (!raw || typeof raw !== "object") return raw;
|
|
7456
8008
|
const o = raw;
|
|
@@ -7567,7 +8119,10 @@ var EmailPasswordAuthLayerSchemaValidated3 = external_exports.object({
|
|
|
7567
8119
|
kind: external_exports.literal("email_password_auth"),
|
|
7568
8120
|
mode: EmailPasswordAuthModeSchema3,
|
|
7569
8121
|
fieldKey: FieldKeySchema3,
|
|
8122
|
+
/** @deprecated Prefer `passwordRules.minLength`. Kept for backward compatibility. */
|
|
7570
8123
|
minPasswordLength: external_exports.number().int().min(4).max(128).optional(),
|
|
8124
|
+
/** Composition rules beyond minimum length (uppercase, digit, special, max). */
|
|
8125
|
+
passwordRules: PasswordRulesSchema3.optional(),
|
|
7571
8126
|
children: external_exports.lazy(
|
|
7572
8127
|
() => external_exports.array(external_exports.union([EmailPasswordFieldLayerSchema3, EmailPasswordSubmitLayerSchema3])).min(1)
|
|
7573
8128
|
),
|
|
@@ -7686,16 +8241,39 @@ var TextInputFieldStyleSchema3 = external_exports.object({
|
|
|
7686
8241
|
letterSpacing: external_exports.number().min(-0.5).max(1).optional(),
|
|
7687
8242
|
opacity: external_exports.number().min(0).max(1).optional()
|
|
7688
8243
|
}).partial();
|
|
8244
|
+
var TextInputAutoCapitalizeSchema3 = external_exports.enum([
|
|
8245
|
+
"none",
|
|
8246
|
+
"sentences",
|
|
8247
|
+
"words",
|
|
8248
|
+
"characters"
|
|
8249
|
+
]);
|
|
8250
|
+
var TextInputReturnKeyTypeSchema3 = external_exports.enum([
|
|
8251
|
+
"done",
|
|
8252
|
+
"next",
|
|
8253
|
+
"go",
|
|
8254
|
+
"send",
|
|
8255
|
+
"search",
|
|
8256
|
+
"default"
|
|
8257
|
+
]);
|
|
8258
|
+
var TextInputValidationModeSchema3 = external_exports.enum(["onBlur", "onSubmit", "live"]);
|
|
7689
8259
|
var TextInputLayerSchema3 = external_exports.object({
|
|
7690
8260
|
...baseLayerShape3,
|
|
7691
8261
|
kind: external_exports.literal("text_input"),
|
|
7692
8262
|
fieldKey: FieldKeySchema3,
|
|
7693
8263
|
placeholder: LocalizedTextSchema4.optional(),
|
|
8264
|
+
/** Optional helper copy shown under the field when valid / untouched. */
|
|
8265
|
+
helperText: LocalizedTextSchema4.optional(),
|
|
7694
8266
|
inputType: TextInputTypeSchema3.optional(),
|
|
7695
8267
|
required: external_exports.boolean().optional(),
|
|
7696
8268
|
minLength: external_exports.number().int().min(0).max(2e3).optional(),
|
|
7697
8269
|
maxLength: external_exports.number().int().positive().max(2e3).optional(),
|
|
7698
8270
|
classification: FieldClassificationSchema3,
|
|
8271
|
+
/** Override autocapitalize (defaults from `inputType` when omitted). */
|
|
8272
|
+
autoCapitalize: TextInputAutoCapitalizeSchema3.optional(),
|
|
8273
|
+
/** Soft keyboard return key label. */
|
|
8274
|
+
returnKeyType: TextInputReturnKeyTypeSchema3.optional(),
|
|
8275
|
+
/** When to show inline validation errors (default `onBlur`). */
|
|
8276
|
+
validationMode: TextInputValidationModeSchema3.optional(),
|
|
7699
8277
|
children: external_exports.lazy(() => external_exports.array(lazyLayer53())).optional(),
|
|
7700
8278
|
/** Typography for the native input's typed text. */
|
|
7701
8279
|
fieldStyle: TextInputFieldStyleSchema3.optional(),
|
|
@@ -7767,6 +8345,221 @@ var WheelPickerLayerSchema3 = external_exports.object({
|
|
|
7767
8345
|
style: CommonStyleSchema3.optional(),
|
|
7768
8346
|
styleBreakpoints: CommonStyleBreakpointsSchema3
|
|
7769
8347
|
});
|
|
8348
|
+
var DATE_TIME_INPUT_MODES3 = ["date", "time", "datetime"];
|
|
8349
|
+
var NUMBER_STEPPER_BUTTON_ROLES3 = ["decrement", "increment"];
|
|
8350
|
+
var ADDRESS_INPUT_FIELDS3 = [
|
|
8351
|
+
"line1",
|
|
8352
|
+
"line2",
|
|
8353
|
+
"city",
|
|
8354
|
+
"region",
|
|
8355
|
+
"postalCode",
|
|
8356
|
+
"country"
|
|
8357
|
+
];
|
|
8358
|
+
var lazyLayer63 = () => layerSchemaStore3.schema;
|
|
8359
|
+
var CountryCodeSchema3 = external_exports.string().length(2).regex(/^[A-Za-z]{2}$/u).transform((s) => s.toUpperCase());
|
|
8360
|
+
var DateTimeInputModeSchema3 = external_exports.enum(DATE_TIME_INPUT_MODES3);
|
|
8361
|
+
var DateTimeInputLayerSchema3 = external_exports.object({
|
|
8362
|
+
...baseLayerShape3,
|
|
8363
|
+
kind: external_exports.literal("date_time_input"),
|
|
8364
|
+
fieldKey: FieldKeySchema3,
|
|
8365
|
+
mode: DateTimeInputModeSchema3.optional(),
|
|
8366
|
+
required: external_exports.boolean().optional(),
|
|
8367
|
+
min: external_exports.string().min(1).max(64).optional(),
|
|
8368
|
+
max: external_exports.string().min(1).max(64).optional(),
|
|
8369
|
+
defaultValue: external_exports.string().min(1).max(64).optional(),
|
|
8370
|
+
placeholder: LocalizedTextSchema4.optional(),
|
|
8371
|
+
classification: FieldClassificationSchema3,
|
|
8372
|
+
children: external_exports.lazy(() => external_exports.array(lazyLayer63())).optional(),
|
|
8373
|
+
fieldStyle: TextInputFieldStyleSchema3.optional(),
|
|
8374
|
+
style: CommonStyleSchema3.optional(),
|
|
8375
|
+
styleBreakpoints: CommonStyleBreakpointsSchema3
|
|
8376
|
+
});
|
|
8377
|
+
var NumberStepperButtonRoleSchema3 = external_exports.enum(NUMBER_STEPPER_BUTTON_ROLES3);
|
|
8378
|
+
var NumberStepperButtonLayerSchema3 = external_exports.object({
|
|
8379
|
+
...baseLayerShape3,
|
|
8380
|
+
kind: external_exports.literal("number_stepper_button"),
|
|
8381
|
+
role: NumberStepperButtonRoleSchema3,
|
|
8382
|
+
children: external_exports.lazy(() => external_exports.array(lazyLayer63())).optional(),
|
|
8383
|
+
style: CommonStyleSchema3.optional(),
|
|
8384
|
+
styleBreakpoints: CommonStyleBreakpointsSchema3
|
|
8385
|
+
});
|
|
8386
|
+
var NumberStepperValueLayerSchema3 = external_exports.object({
|
|
8387
|
+
...baseLayerShape3,
|
|
8388
|
+
kind: external_exports.literal("number_stepper_value"),
|
|
8389
|
+
unitLabel: LocalizedTextSchema4.optional(),
|
|
8390
|
+
style: TextStyleSchema3.optional(),
|
|
8391
|
+
styleBreakpoints: TextStyleBreakpointsSchema3
|
|
8392
|
+
});
|
|
8393
|
+
var migrateNumberStepperIncoming3 = (raw) => {
|
|
8394
|
+
if (!raw || typeof raw !== "object") return raw;
|
|
8395
|
+
const o = raw;
|
|
8396
|
+
if (o.kind !== "number_stepper") return raw;
|
|
8397
|
+
if (Array.isArray(o.children) && o.children.length > 0) return raw;
|
|
8398
|
+
const idBase = typeof o.id === "string" ? o.id : "lyr_number_stepper";
|
|
8399
|
+
const slugRaw = idBase.replace(/^lyr_/i, "").replace(/[^a-z0-9_]/gi, "_");
|
|
8400
|
+
const slug = slugRaw.length > 0 ? slugRaw.slice(0, 40) : "stepper";
|
|
8401
|
+
const valueStyle = o.valueStyle && typeof o.valueStyle === "object" ? o.valueStyle : void 0;
|
|
8402
|
+
const buttonColor = o.buttonColor;
|
|
8403
|
+
const mkButton = (role, glyph) => {
|
|
8404
|
+
const suf = role === "decrement" ? "dec" : "inc";
|
|
8405
|
+
return {
|
|
8406
|
+
id: `lyr_${slug}_btn_${suf}`.slice(0, 64),
|
|
8407
|
+
kind: "number_stepper_button",
|
|
8408
|
+
role,
|
|
8409
|
+
style: {
|
|
8410
|
+
width: 36,
|
|
8411
|
+
height: 36,
|
|
8412
|
+
radius: 8
|
|
8413
|
+
},
|
|
8414
|
+
children: [
|
|
8415
|
+
{
|
|
8416
|
+
id: `lyr_${slug}_btn_${suf}_txt`.slice(0, 64),
|
|
8417
|
+
kind: "text",
|
|
8418
|
+
text: { default: glyph },
|
|
8419
|
+
style: {
|
|
8420
|
+
fontSize: 20,
|
|
8421
|
+
align: "center",
|
|
8422
|
+
...buttonColor !== void 0 ? { color: buttonColor } : {}
|
|
8423
|
+
}
|
|
8424
|
+
}
|
|
8425
|
+
]
|
|
8426
|
+
};
|
|
8427
|
+
};
|
|
8428
|
+
const valueChild = {
|
|
8429
|
+
id: `lyr_${slug}_value`.slice(0, 64),
|
|
8430
|
+
kind: "number_stepper_value",
|
|
8431
|
+
style: {
|
|
8432
|
+
fontSize: typeof valueStyle?.fontSize === "number" ? valueStyle.fontSize : 14,
|
|
8433
|
+
width: "full",
|
|
8434
|
+
...typeof valueStyle?.fontFamily === "string" ? { fontFamily: valueStyle.fontFamily } : {},
|
|
8435
|
+
...typeof valueStyle?.fontWeight === "number" ? { fontWeight: valueStyle.fontWeight } : {},
|
|
8436
|
+
...valueStyle?.color !== void 0 ? { color: valueStyle.color } : {},
|
|
8437
|
+
...typeof valueStyle?.lineHeight === "number" ? { lineHeight: valueStyle.lineHeight } : {},
|
|
8438
|
+
...typeof valueStyle?.letterSpacing === "number" ? { letterSpacing: valueStyle.letterSpacing } : {},
|
|
8439
|
+
...typeof valueStyle?.opacity === "number" ? { opacity: valueStyle.opacity } : {},
|
|
8440
|
+
align: typeof valueStyle?.align === "string" ? valueStyle.align : "center"
|
|
8441
|
+
}
|
|
8442
|
+
};
|
|
8443
|
+
if (o.unitLabel !== void 0) valueChild.unitLabel = o.unitLabel;
|
|
8444
|
+
const {
|
|
8445
|
+
valueStyle: _vs,
|
|
8446
|
+
buttonColor: _bc,
|
|
8447
|
+
unitLabel: _ul,
|
|
8448
|
+
...rest
|
|
8449
|
+
} = o;
|
|
8450
|
+
return {
|
|
8451
|
+
...rest,
|
|
8452
|
+
direction: typeof o.direction === "string" ? o.direction : "horizontal",
|
|
8453
|
+
gap: typeof o.gap === "number" ? o.gap : 12,
|
|
8454
|
+
align: typeof o.align === "string" ? o.align : "center",
|
|
8455
|
+
...typeof o.distribution === "string" ? { distribution: o.distribution } : {},
|
|
8456
|
+
children: [mkButton("decrement", "-"), valueChild, mkButton("increment", "+")]
|
|
8457
|
+
};
|
|
8458
|
+
};
|
|
8459
|
+
var refineNumberStepperChildren3 = (data, ctx) => {
|
|
8460
|
+
const buttons = data.children.filter((c) => c.kind === "number_stepper_button");
|
|
8461
|
+
const values = data.children.filter((c) => c.kind === "number_stepper_value");
|
|
8462
|
+
const other = data.children.filter(
|
|
8463
|
+
(c) => c.kind !== "number_stepper_button" && c.kind !== "number_stepper_value"
|
|
8464
|
+
);
|
|
8465
|
+
if (other.length > 0) {
|
|
8466
|
+
ctx.addIssue({
|
|
8467
|
+
code: external_exports.ZodIssueCode.custom,
|
|
8468
|
+
message: "number_stepper children must be number_stepper_button or number_stepper_value",
|
|
8469
|
+
path: ["children"]
|
|
8470
|
+
});
|
|
8471
|
+
}
|
|
8472
|
+
const roles = /* @__PURE__ */ new Set();
|
|
8473
|
+
for (const b of buttons) {
|
|
8474
|
+
if (b.kind !== "number_stepper_button") continue;
|
|
8475
|
+
if (roles.has(b.role)) {
|
|
8476
|
+
ctx.addIssue({
|
|
8477
|
+
code: external_exports.ZodIssueCode.custom,
|
|
8478
|
+
message: `duplicate number_stepper_button role "${b.role}"`,
|
|
8479
|
+
path: ["children"]
|
|
8480
|
+
});
|
|
8481
|
+
}
|
|
8482
|
+
roles.add(b.role);
|
|
8483
|
+
}
|
|
8484
|
+
for (const role of NUMBER_STEPPER_BUTTON_ROLES3) {
|
|
8485
|
+
if (!roles.has(role)) {
|
|
8486
|
+
ctx.addIssue({
|
|
8487
|
+
code: external_exports.ZodIssueCode.custom,
|
|
8488
|
+
message: `number_stepper requires a number_stepper_button with role "${role}"`,
|
|
8489
|
+
path: ["children"]
|
|
8490
|
+
});
|
|
8491
|
+
}
|
|
8492
|
+
}
|
|
8493
|
+
if (values.length !== 1) {
|
|
8494
|
+
ctx.addIssue({
|
|
8495
|
+
code: external_exports.ZodIssueCode.custom,
|
|
8496
|
+
message: `number_stepper must have exactly one number_stepper_value (found ${values.length})`,
|
|
8497
|
+
path: ["children"]
|
|
8498
|
+
});
|
|
8499
|
+
}
|
|
8500
|
+
};
|
|
8501
|
+
var NumberStepperLayerSchemaValidated3 = external_exports.object({
|
|
8502
|
+
...baseLayerShape3,
|
|
8503
|
+
kind: external_exports.literal("number_stepper"),
|
|
8504
|
+
fieldKey: FieldKeySchema3,
|
|
8505
|
+
min: external_exports.number(),
|
|
8506
|
+
max: external_exports.number(),
|
|
8507
|
+
step: external_exports.number().positive().optional(),
|
|
8508
|
+
defaultValue: external_exports.number().optional(),
|
|
8509
|
+
classification: FieldClassificationSchema3,
|
|
8510
|
+
direction: external_exports.enum(["vertical", "horizontal"]).optional(),
|
|
8511
|
+
gap: external_exports.number().int().min(0).max(64).optional(),
|
|
8512
|
+
align: external_exports.enum(["start", "center", "end", "stretch"]).optional(),
|
|
8513
|
+
distribution: external_exports.enum(["start", "center", "end", "between", "around"]).optional(),
|
|
8514
|
+
children: external_exports.lazy(
|
|
8515
|
+
() => external_exports.array(external_exports.union([NumberStepperButtonLayerSchema3, NumberStepperValueLayerSchema3])).min(1)
|
|
8516
|
+
),
|
|
8517
|
+
style: CommonStyleSchema3.optional(),
|
|
8518
|
+
styleBreakpoints: CommonStyleBreakpointsSchema3
|
|
8519
|
+
}).superRefine(refineNumberStepperChildren3);
|
|
8520
|
+
var NumberStepperLayerSchema3 = external_exports.preprocess(
|
|
8521
|
+
migrateNumberStepperIncoming3,
|
|
8522
|
+
NumberStepperLayerSchemaValidated3
|
|
8523
|
+
);
|
|
8524
|
+
var PhoneInputLayerSchema3 = external_exports.object({
|
|
8525
|
+
...baseLayerShape3,
|
|
8526
|
+
kind: external_exports.literal("phone_input"),
|
|
8527
|
+
fieldKey: FieldKeySchema3,
|
|
8528
|
+
defaultCountryCode: CountryCodeSchema3.optional(),
|
|
8529
|
+
allowedCountryCodes: external_exports.array(CountryCodeSchema3).min(1).max(250).optional(),
|
|
8530
|
+
required: external_exports.boolean().optional(),
|
|
8531
|
+
placeholder: LocalizedTextSchema4.optional(),
|
|
8532
|
+
classification: FieldClassificationSchema3,
|
|
8533
|
+
children: external_exports.lazy(() => external_exports.array(lazyLayer63())).optional(),
|
|
8534
|
+
fieldStyle: TextInputFieldStyleSchema3.optional(),
|
|
8535
|
+
style: CommonStyleSchema3.optional(),
|
|
8536
|
+
styleBreakpoints: CommonStyleBreakpointsSchema3
|
|
8537
|
+
});
|
|
8538
|
+
var AddressInputFieldSchema3 = external_exports.enum(ADDRESS_INPUT_FIELDS3);
|
|
8539
|
+
var AddressInputPlaceholdersSchema3 = external_exports.object({
|
|
8540
|
+
line1: LocalizedTextSchema4.optional(),
|
|
8541
|
+
line2: LocalizedTextSchema4.optional(),
|
|
8542
|
+
city: LocalizedTextSchema4.optional(),
|
|
8543
|
+
region: LocalizedTextSchema4.optional(),
|
|
8544
|
+
postalCode: LocalizedTextSchema4.optional(),
|
|
8545
|
+
country: LocalizedTextSchema4.optional()
|
|
8546
|
+
}).partial();
|
|
8547
|
+
var AddressInputLayerSchema3 = external_exports.object({
|
|
8548
|
+
...baseLayerShape3,
|
|
8549
|
+
kind: external_exports.literal("address_input"),
|
|
8550
|
+
fieldKey: FieldKeySchema3,
|
|
8551
|
+
requiredFields: external_exports.array(AddressInputFieldSchema3).min(1).max(6).optional(),
|
|
8552
|
+
showLine2: external_exports.boolean().optional(),
|
|
8553
|
+
showRegion: external_exports.boolean().optional(),
|
|
8554
|
+
defaultCountryCode: CountryCodeSchema3.optional(),
|
|
8555
|
+
placeholders: AddressInputPlaceholdersSchema3.optional(),
|
|
8556
|
+
classification: FieldClassificationSchema3,
|
|
8557
|
+
children: external_exports.lazy(() => external_exports.array(lazyLayer63())).optional(),
|
|
8558
|
+
fieldStyle: TextInputFieldStyleSchema3.optional(),
|
|
8559
|
+
gap: external_exports.number().int().min(0).max(64).optional(),
|
|
8560
|
+
style: CommonStyleSchema3.optional(),
|
|
8561
|
+
styleBreakpoints: CommonStyleBreakpointsSchema3
|
|
8562
|
+
});
|
|
7770
8563
|
var CarouselIndicatorsStyleSchema3 = external_exports.object({
|
|
7771
8564
|
width: external_exports.number().int().min(1).max(64).optional(),
|
|
7772
8565
|
height: external_exports.number().int().min(1).max(64).optional(),
|
|
@@ -7972,6 +8765,12 @@ layerSchemaStore3.schema = external_exports.lazy(
|
|
|
7972
8765
|
TextInputLayerSchema3,
|
|
7973
8766
|
ScaleInputLayerSchema3,
|
|
7974
8767
|
WheelPickerLayerSchema3,
|
|
8768
|
+
DateTimeInputLayerSchema3,
|
|
8769
|
+
NumberStepperLayerSchema3,
|
|
8770
|
+
NumberStepperButtonLayerSchema3,
|
|
8771
|
+
NumberStepperValueLayerSchema3,
|
|
8772
|
+
PhoneInputLayerSchema3,
|
|
8773
|
+
AddressInputLayerSchema3,
|
|
7975
8774
|
OAuthLoginLayerSchema3,
|
|
7976
8775
|
OAuthProviderPresetLayerSchema3,
|
|
7977
8776
|
OAuthProviderCustomLayerSchema3,
|
|
@@ -7996,14 +8795,21 @@ var layerChildren = (layer) => {
|
|
|
7996
8795
|
case "oauth_login":
|
|
7997
8796
|
case "email_password_auth":
|
|
7998
8797
|
case "email_password_submit":
|
|
8798
|
+
case "number_stepper":
|
|
7999
8799
|
return layer.children;
|
|
8000
8800
|
case "carousel":
|
|
8001
8801
|
return layer.slides;
|
|
8002
8802
|
case "text_input":
|
|
8003
8803
|
case "scale_input":
|
|
8004
8804
|
case "wheel_picker":
|
|
8805
|
+
case "date_time_input":
|
|
8806
|
+
case "phone_input":
|
|
8807
|
+
case "address_input":
|
|
8005
8808
|
case "email_password_field":
|
|
8809
|
+
case "number_stepper_button":
|
|
8006
8810
|
return layer.children ?? [];
|
|
8811
|
+
case "number_stepper_value":
|
|
8812
|
+
return [];
|
|
8007
8813
|
case "oauth_provider":
|
|
8008
8814
|
return layer.variant === "custom" ? layer.children : [];
|
|
8009
8815
|
default:
|
|
@@ -8041,7 +8847,15 @@ var layerHasAbsolutePositionAuthored = (layer) => {
|
|
|
8041
8847
|
case "text_input":
|
|
8042
8848
|
case "scale_input":
|
|
8043
8849
|
case "wheel_picker":
|
|
8850
|
+
case "date_time_input":
|
|
8851
|
+
case "number_stepper":
|
|
8852
|
+
case "phone_input":
|
|
8853
|
+
case "address_input":
|
|
8044
8854
|
return commonStyleHasAbsolutePosition(layer.style, void 0);
|
|
8855
|
+
case "number_stepper_button":
|
|
8856
|
+
return commonStyleHasAbsolutePosition(layer.style, layer.styleBreakpoints);
|
|
8857
|
+
case "number_stepper_value":
|
|
8858
|
+
return commonStyleHasAbsolutePosition(layer.style, layer.styleBreakpoints);
|
|
8045
8859
|
case "oauth_provider":
|
|
8046
8860
|
if (layer.variant === "preset") {
|
|
8047
8861
|
return commonStyleHasAbsolutePosition(layer.style, layer.styleBreakpoints);
|
|
@@ -8065,7 +8879,7 @@ var layerHasAbsolutePositionAuthored = (layer) => {
|
|
|
8065
8879
|
return false;
|
|
8066
8880
|
}
|
|
8067
8881
|
};
|
|
8068
|
-
var isInputLayer2 = (l) => l.kind === "single_choice" || l.kind === "multiple_choice" || l.kind === "text_input" || l.kind === "scale_input" || l.kind === "wheel_picker";
|
|
8882
|
+
var isInputLayer2 = (l) => l.kind === "single_choice" || l.kind === "multiple_choice" || l.kind === "text_input" || l.kind === "scale_input" || l.kind === "wheel_picker" || l.kind === "date_time_input" || l.kind === "number_stepper" || l.kind === "phone_input" || l.kind === "address_input";
|
|
8069
8883
|
var ANIMATABLE_PROPERTIES = [
|
|
8070
8884
|
"opacity",
|
|
8071
8885
|
"translateX",
|
|
@@ -8317,7 +9131,11 @@ var walkScreenLayersWithLayoutContext = (screen, fn) => {
|
|
|
8317
9131
|
for (const c of l.children) {
|
|
8318
9132
|
visit(c, childCtx({ insideChoiceOption: true }));
|
|
8319
9133
|
}
|
|
8320
|
-
} else if (l.kind === "text_input" || l.kind === "scale_input") {
|
|
9134
|
+
} else if (l.kind === "text_input" || l.kind === "scale_input" || l.kind === "wheel_picker" || l.kind === "date_time_input" || l.kind === "phone_input" || l.kind === "address_input") {
|
|
9135
|
+
for (const c of l.children ?? []) visit(c, childCtx());
|
|
9136
|
+
} else if (l.kind === "number_stepper") {
|
|
9137
|
+
for (const c of l.children) visit(c, childCtx());
|
|
9138
|
+
} else if (l.kind === "number_stepper_button") {
|
|
8321
9139
|
for (const c of l.children ?? []) visit(c, childCtx());
|
|
8322
9140
|
} else if (l.kind === "oauth_login") {
|
|
8323
9141
|
for (const c of l.children) visit(c, childCtx());
|
|
@@ -8352,7 +9170,11 @@ var walkScreenLayers = (screen, fn) => {
|
|
|
8352
9170
|
else if (l.kind === "hyperlink") l.children.forEach(visit);
|
|
8353
9171
|
else if (l.kind === "single_choice" || l.kind === "multiple_choice") {
|
|
8354
9172
|
l.children.forEach(visit);
|
|
8355
|
-
} else if (l.kind === "text_input" || l.kind === "scale_input") {
|
|
9173
|
+
} else if (l.kind === "text_input" || l.kind === "scale_input" || l.kind === "wheel_picker" || l.kind === "date_time_input" || l.kind === "phone_input" || l.kind === "address_input") {
|
|
9174
|
+
l.children?.forEach(visit);
|
|
9175
|
+
} else if (l.kind === "number_stepper") {
|
|
9176
|
+
l.children.forEach(visit);
|
|
9177
|
+
} else if (l.kind === "number_stepper_button") {
|
|
8356
9178
|
l.children?.forEach(visit);
|
|
8357
9179
|
} else if (l.kind === "oauth_login") {
|
|
8358
9180
|
l.children.forEach(visit);
|
|
@@ -8435,7 +9257,7 @@ var NORMALIZED_SURFACE_OUTCOMES = [
|
|
|
8435
9257
|
"back"
|
|
8436
9258
|
];
|
|
8437
9259
|
var NormalizedSurfaceOutcomeSchema = external_exports.enum(NORMALIZED_SURFACE_OUTCOMES);
|
|
8438
|
-
var SurfaceProviderSchema = external_exports.enum(["unspecified", "revenuecat", "headless"]);
|
|
9260
|
+
var SurfaceProviderSchema = external_exports.enum(["unspecified", "revenuecat", "superwall", "headless"]);
|
|
8439
9261
|
var UnspecifiedExternalSurfaceConfigSchema = external_exports.object({
|
|
8440
9262
|
provider: external_exports.literal("unspecified")
|
|
8441
9263
|
});
|
|
@@ -8446,6 +9268,10 @@ var RevenueCatSurfaceConfigSchema = external_exports.object({
|
|
|
8446
9268
|
placementId: external_exports.string().min(1).max(128).optional(),
|
|
8447
9269
|
presentation: RevenueCatSurfacePresentationSchema.optional()
|
|
8448
9270
|
});
|
|
9271
|
+
var SuperwallSurfaceConfigSchema = external_exports.object({
|
|
9272
|
+
provider: external_exports.literal("superwall"),
|
|
9273
|
+
placementId: external_exports.string().min(1).max(128).optional()
|
|
9274
|
+
});
|
|
8449
9275
|
var ExternalSurfaceHostKeySchema = external_exports.string().min(1).max(64).regex(
|
|
8450
9276
|
/^[a-zA-Z][a-zA-Z0-9_]*$/,
|
|
8451
9277
|
"host key must start with a letter and contain only letters, digits, or underscores"
|
|
@@ -8458,6 +9284,7 @@ var HeadlessExternalSurfaceConfigSchema = external_exports.object({
|
|
|
8458
9284
|
var ExternalSurfaceConfigSchema = external_exports.discriminatedUnion("provider", [
|
|
8459
9285
|
UnspecifiedExternalSurfaceConfigSchema,
|
|
8460
9286
|
RevenueCatSurfaceConfigSchema,
|
|
9287
|
+
SuperwallSurfaceConfigSchema,
|
|
8461
9288
|
HeadlessExternalSurfaceConfigSchema
|
|
8462
9289
|
]);
|
|
8463
9290
|
var ExternalSurfaceOutcomesMapSchema = external_exports.object({
|
|
@@ -8494,7 +9321,18 @@ var RESERVED_RC_SDK_KEYS = [
|
|
|
8494
9321
|
/** RevenueCat offering id surfaced by the most recent paywall presentation. */
|
|
8495
9322
|
"onb_rc_last_offering_id"
|
|
8496
9323
|
];
|
|
8497
|
-
var
|
|
9324
|
+
var RESERVED_SUPERWALL_SDK_KEYS = [
|
|
9325
|
+
/** Last Superwall event observed by the SDK (e.g. `purchase_completed`, `dismissed`). */
|
|
9326
|
+
"onb_sw_last_event",
|
|
9327
|
+
/** Product identifier from the most recent successful Superwall purchase. */
|
|
9328
|
+
"onb_sw_last_product_id",
|
|
9329
|
+
/** Placement id from the most recent Superwall registration. */
|
|
9330
|
+
"onb_sw_last_placement_id"
|
|
9331
|
+
];
|
|
9332
|
+
var RESERVED_SDK_KEYS_SET = /* @__PURE__ */ new Set([
|
|
9333
|
+
...RESERVED_RC_SDK_KEYS,
|
|
9334
|
+
...RESERVED_SUPERWALL_SDK_KEYS
|
|
9335
|
+
]);
|
|
8498
9336
|
var isReservedSdkKey = (key) => RESERVED_SDK_KEYS_SET.has(key);
|
|
8499
9337
|
var MANIFEST_SCHEMA_VERSION = 7;
|
|
8500
9338
|
var ThemeSchema = external_exports.object({
|
|
@@ -8876,6 +9714,13 @@ var refineManifestScreens = (manifest, ctx, jumpTargets, screenIds, allFieldKeys
|
|
|
8876
9714
|
path: ["screens", screenIdx, "regions"]
|
|
8877
9715
|
});
|
|
8878
9716
|
}
|
|
9717
|
+
if ((l.kind === "number_stepper_button" || l.kind === "number_stepper_value") && layoutCtx.parentKind !== "number_stepper") {
|
|
9718
|
+
ctx.addIssue({
|
|
9719
|
+
code: external_exports.ZodIssueCode.custom,
|
|
9720
|
+
message: `Layer "${l.id}" (${l.kind}) must be nested under a number stepper`,
|
|
9721
|
+
path: ["screens", screenIdx, "regions"]
|
|
9722
|
+
});
|
|
9723
|
+
}
|
|
8879
9724
|
});
|
|
8880
9725
|
const nextDefault = screen.next.default;
|
|
8881
9726
|
if (nextDefault && !jumpTargets.has(nextDefault)) {
|
|
@@ -9117,15 +9962,21 @@ var RevenueCatIntegrationSchema = external_exports.object({
|
|
|
9117
9962
|
defaultOfferingId: external_exports.string(),
|
|
9118
9963
|
defaultPlacementId: external_exports.string()
|
|
9119
9964
|
});
|
|
9965
|
+
var SuperwallIntegrationSchema = external_exports.object({
|
|
9966
|
+
enabled: external_exports.boolean(),
|
|
9967
|
+
defaultPlacementId: external_exports.string()
|
|
9968
|
+
});
|
|
9120
9969
|
var AppsFlyerIntegrationSchema = external_exports.object({
|
|
9121
9970
|
enabled: external_exports.boolean()
|
|
9122
9971
|
});
|
|
9123
9972
|
var ResolvedAppIntegrationsSchema = external_exports.object({
|
|
9124
9973
|
revenuecat: RevenueCatIntegrationSchema,
|
|
9974
|
+
superwall: SuperwallIntegrationSchema,
|
|
9125
9975
|
appsflyer: AppsFlyerIntegrationSchema
|
|
9126
9976
|
});
|
|
9127
9977
|
var AppIntegrationsSchema = external_exports.object({
|
|
9128
9978
|
revenuecat: RevenueCatIntegrationSchema.partial().optional(),
|
|
9979
|
+
superwall: SuperwallIntegrationSchema.partial().optional(),
|
|
9129
9980
|
appsflyer: AppsFlyerIntegrationSchema.partial().optional()
|
|
9130
9981
|
}).passthrough();
|
|
9131
9982
|
var DASHBOARD_ATTRIBUTION_INTEGRATION_PROVIDER_IDS = ["appsflyer"];
|
|
@@ -9307,14 +10158,14 @@ var SdkEventBatchSchema = external_exports.object({
|
|
|
9307
10158
|
var IapPurchasePeriodTypeSchema = external_exports.enum(["normal", "intro", "trial"]);
|
|
9308
10159
|
var IapPurchaseEventPropertiesSchema = external_exports.object({
|
|
9309
10160
|
/** External surface provider that produced the purchase. */
|
|
9310
|
-
provider: external_exports.
|
|
10161
|
+
provider: external_exports.enum(["revenuecat", "superwall"]),
|
|
9311
10162
|
/** Manifest node id of the surface (e.g. `surf_paywall_welcome`). */
|
|
9312
10163
|
surface_node_id: external_exports.string().min(1).max(128),
|
|
9313
10164
|
/** Store product identifier (e.g. `pro_annual`). */
|
|
9314
10165
|
product_id: external_exports.string().min(1).max(256),
|
|
9315
|
-
/** Optional
|
|
10166
|
+
/** Optional offering id (RevenueCat) or placement id mirrored for analytics. */
|
|
9316
10167
|
offering_id: external_exports.string().min(1).max(128).optional(),
|
|
9317
|
-
/** Optional
|
|
10168
|
+
/** Optional package identifier within an offering (e.g. `$rc_annual`). */
|
|
9318
10169
|
package_id: external_exports.string().min(1).max(128).optional(),
|
|
9319
10170
|
/** Localized gross store price at purchase time (non-negative). */
|
|
9320
10171
|
price: external_exports.number().nonnegative().optional(),
|
|
@@ -9846,11 +10697,11 @@ var OAuthPresetButtonChromeBreakpointsSchema4 = external_exports.object({
|
|
|
9846
10697
|
}).partial().optional();
|
|
9847
10698
|
var EMAIL_PASSWORD_AUTH_MODES4 = ["sign_in", "sign_up"];
|
|
9848
10699
|
var EMAIL_PASSWORD_SLOTS4 = ["email", "password", "confirm"];
|
|
9849
|
-
var
|
|
10700
|
+
var lazyLayer9 = () => layerSchemaStore4.schema;
|
|
9850
10701
|
var ButtonLayerSchema4 = external_exports.object({
|
|
9851
10702
|
...baseLayerShape4,
|
|
9852
10703
|
kind: external_exports.literal("button"),
|
|
9853
|
-
children: external_exports.lazy(() => external_exports.array(
|
|
10704
|
+
children: external_exports.lazy(() => external_exports.array(lazyLayer9())),
|
|
9854
10705
|
action: ButtonActionSchema4,
|
|
9855
10706
|
variant: ButtonLayerVariantSchema4,
|
|
9856
10707
|
direction: external_exports.enum(["vertical", "horizontal"]).optional(),
|
|
@@ -9864,7 +10715,7 @@ var ButtonLayerSchema4 = external_exports.object({
|
|
|
9864
10715
|
var BackButtonLayerSchema4 = external_exports.object({
|
|
9865
10716
|
...baseLayerShape4,
|
|
9866
10717
|
kind: external_exports.literal("back_button"),
|
|
9867
|
-
children: external_exports.lazy(() => external_exports.array(
|
|
10718
|
+
children: external_exports.lazy(() => external_exports.array(lazyLayer9())),
|
|
9868
10719
|
variant: ButtonLayerVariantSchema4,
|
|
9869
10720
|
direction: external_exports.enum(["vertical", "horizontal"]).optional(),
|
|
9870
10721
|
gap: external_exports.number().int().min(0).optional(),
|
|
@@ -10251,6 +11102,22 @@ var FieldKeySchema5 = external_exports.string().min(1).max(64).regex(FIELD_KEY_R
|
|
|
10251
11102
|
var FieldClassificationSchema5 = external_exports.enum(FIELD_CLASSIFICATIONS5);
|
|
10252
11103
|
var lazyLayer44 = () => layerSchemaStore4.schema;
|
|
10253
11104
|
var EmailPasswordAuthModeSchema4 = external_exports.enum(EMAIL_PASSWORD_AUTH_MODES4);
|
|
11105
|
+
var PasswordRulesSchema4 = external_exports.object({
|
|
11106
|
+
minLength: external_exports.number().int().min(4).max(128).optional(),
|
|
11107
|
+
maxLength: external_exports.number().int().min(4).max(128).optional(),
|
|
11108
|
+
requireUppercase: external_exports.boolean().optional(),
|
|
11109
|
+
requireLowercase: external_exports.boolean().optional(),
|
|
11110
|
+
requireDigit: external_exports.boolean().optional(),
|
|
11111
|
+
requireSpecial: external_exports.boolean().optional()
|
|
11112
|
+
}).strict().superRefine((data, ctx) => {
|
|
11113
|
+
if (data.minLength !== void 0 && data.maxLength !== void 0 && data.maxLength < data.minLength) {
|
|
11114
|
+
ctx.addIssue({
|
|
11115
|
+
code: external_exports.ZodIssueCode.custom,
|
|
11116
|
+
message: "passwordRules.maxLength must be >= minLength",
|
|
11117
|
+
path: ["maxLength"]
|
|
11118
|
+
});
|
|
11119
|
+
}
|
|
11120
|
+
});
|
|
10254
11121
|
var migrateEmailPasswordAuthIncoming4 = (raw) => {
|
|
10255
11122
|
if (!raw || typeof raw !== "object") return raw;
|
|
10256
11123
|
const o = raw;
|
|
@@ -10367,7 +11234,10 @@ var EmailPasswordAuthLayerSchemaValidated4 = external_exports.object({
|
|
|
10367
11234
|
kind: external_exports.literal("email_password_auth"),
|
|
10368
11235
|
mode: EmailPasswordAuthModeSchema4,
|
|
10369
11236
|
fieldKey: FieldKeySchema5,
|
|
11237
|
+
/** @deprecated Prefer `passwordRules.minLength`. Kept for backward compatibility. */
|
|
10370
11238
|
minPasswordLength: external_exports.number().int().min(4).max(128).optional(),
|
|
11239
|
+
/** Composition rules beyond minimum length (uppercase, digit, special, max). */
|
|
11240
|
+
passwordRules: PasswordRulesSchema4.optional(),
|
|
10371
11241
|
children: external_exports.lazy(
|
|
10372
11242
|
() => external_exports.array(external_exports.union([EmailPasswordFieldLayerSchema4, EmailPasswordSubmitLayerSchema4])).min(1)
|
|
10373
11243
|
),
|
|
@@ -10438,16 +11308,39 @@ var TextInputFieldStyleSchema4 = external_exports.object({
|
|
|
10438
11308
|
letterSpacing: external_exports.number().min(-0.5).max(1).optional(),
|
|
10439
11309
|
opacity: external_exports.number().min(0).max(1).optional()
|
|
10440
11310
|
}).partial();
|
|
11311
|
+
var TextInputAutoCapitalizeSchema4 = external_exports.enum([
|
|
11312
|
+
"none",
|
|
11313
|
+
"sentences",
|
|
11314
|
+
"words",
|
|
11315
|
+
"characters"
|
|
11316
|
+
]);
|
|
11317
|
+
var TextInputReturnKeyTypeSchema4 = external_exports.enum([
|
|
11318
|
+
"done",
|
|
11319
|
+
"next",
|
|
11320
|
+
"go",
|
|
11321
|
+
"send",
|
|
11322
|
+
"search",
|
|
11323
|
+
"default"
|
|
11324
|
+
]);
|
|
11325
|
+
var TextInputValidationModeSchema4 = external_exports.enum(["onBlur", "onSubmit", "live"]);
|
|
10441
11326
|
var TextInputLayerSchema4 = external_exports.object({
|
|
10442
11327
|
...baseLayerShape4,
|
|
10443
11328
|
kind: external_exports.literal("text_input"),
|
|
10444
11329
|
fieldKey: FieldKeySchema5,
|
|
10445
11330
|
placeholder: LocalizedTextSchema5.optional(),
|
|
11331
|
+
/** Optional helper copy shown under the field when valid / untouched. */
|
|
11332
|
+
helperText: LocalizedTextSchema5.optional(),
|
|
10446
11333
|
inputType: TextInputTypeSchema4.optional(),
|
|
10447
11334
|
required: external_exports.boolean().optional(),
|
|
10448
11335
|
minLength: external_exports.number().int().min(0).max(2e3).optional(),
|
|
10449
11336
|
maxLength: external_exports.number().int().positive().max(2e3).optional(),
|
|
10450
11337
|
classification: FieldClassificationSchema5,
|
|
11338
|
+
/** Override autocapitalize (defaults from `inputType` when omitted). */
|
|
11339
|
+
autoCapitalize: TextInputAutoCapitalizeSchema4.optional(),
|
|
11340
|
+
/** Soft keyboard return key label. */
|
|
11341
|
+
returnKeyType: TextInputReturnKeyTypeSchema4.optional(),
|
|
11342
|
+
/** When to show inline validation errors (default `onBlur`). */
|
|
11343
|
+
validationMode: TextInputValidationModeSchema4.optional(),
|
|
10451
11344
|
children: external_exports.lazy(() => external_exports.array(lazyLayer54())).optional(),
|
|
10452
11345
|
/** Typography for the native input's typed text. */
|
|
10453
11346
|
fieldStyle: TextInputFieldStyleSchema4.optional(),
|
|
@@ -10519,6 +11412,221 @@ var WheelPickerLayerSchema4 = external_exports.object({
|
|
|
10519
11412
|
style: CommonStyleSchema4.optional(),
|
|
10520
11413
|
styleBreakpoints: CommonStyleBreakpointsSchema4
|
|
10521
11414
|
});
|
|
11415
|
+
var DATE_TIME_INPUT_MODES4 = ["date", "time", "datetime"];
|
|
11416
|
+
var NUMBER_STEPPER_BUTTON_ROLES4 = ["decrement", "increment"];
|
|
11417
|
+
var ADDRESS_INPUT_FIELDS4 = [
|
|
11418
|
+
"line1",
|
|
11419
|
+
"line2",
|
|
11420
|
+
"city",
|
|
11421
|
+
"region",
|
|
11422
|
+
"postalCode",
|
|
11423
|
+
"country"
|
|
11424
|
+
];
|
|
11425
|
+
var lazyLayer64 = () => layerSchemaStore4.schema;
|
|
11426
|
+
var CountryCodeSchema4 = external_exports.string().length(2).regex(/^[A-Za-z]{2}$/u).transform((s) => s.toUpperCase());
|
|
11427
|
+
var DateTimeInputModeSchema4 = external_exports.enum(DATE_TIME_INPUT_MODES4);
|
|
11428
|
+
var DateTimeInputLayerSchema4 = external_exports.object({
|
|
11429
|
+
...baseLayerShape4,
|
|
11430
|
+
kind: external_exports.literal("date_time_input"),
|
|
11431
|
+
fieldKey: FieldKeySchema5,
|
|
11432
|
+
mode: DateTimeInputModeSchema4.optional(),
|
|
11433
|
+
required: external_exports.boolean().optional(),
|
|
11434
|
+
min: external_exports.string().min(1).max(64).optional(),
|
|
11435
|
+
max: external_exports.string().min(1).max(64).optional(),
|
|
11436
|
+
defaultValue: external_exports.string().min(1).max(64).optional(),
|
|
11437
|
+
placeholder: LocalizedTextSchema5.optional(),
|
|
11438
|
+
classification: FieldClassificationSchema5,
|
|
11439
|
+
children: external_exports.lazy(() => external_exports.array(lazyLayer64())).optional(),
|
|
11440
|
+
fieldStyle: TextInputFieldStyleSchema4.optional(),
|
|
11441
|
+
style: CommonStyleSchema4.optional(),
|
|
11442
|
+
styleBreakpoints: CommonStyleBreakpointsSchema4
|
|
11443
|
+
});
|
|
11444
|
+
var NumberStepperButtonRoleSchema4 = external_exports.enum(NUMBER_STEPPER_BUTTON_ROLES4);
|
|
11445
|
+
var NumberStepperButtonLayerSchema4 = external_exports.object({
|
|
11446
|
+
...baseLayerShape4,
|
|
11447
|
+
kind: external_exports.literal("number_stepper_button"),
|
|
11448
|
+
role: NumberStepperButtonRoleSchema4,
|
|
11449
|
+
children: external_exports.lazy(() => external_exports.array(lazyLayer64())).optional(),
|
|
11450
|
+
style: CommonStyleSchema4.optional(),
|
|
11451
|
+
styleBreakpoints: CommonStyleBreakpointsSchema4
|
|
11452
|
+
});
|
|
11453
|
+
var NumberStepperValueLayerSchema4 = external_exports.object({
|
|
11454
|
+
...baseLayerShape4,
|
|
11455
|
+
kind: external_exports.literal("number_stepper_value"),
|
|
11456
|
+
unitLabel: LocalizedTextSchema5.optional(),
|
|
11457
|
+
style: TextStyleSchema4.optional(),
|
|
11458
|
+
styleBreakpoints: TextStyleBreakpointsSchema4
|
|
11459
|
+
});
|
|
11460
|
+
var migrateNumberStepperIncoming4 = (raw) => {
|
|
11461
|
+
if (!raw || typeof raw !== "object") return raw;
|
|
11462
|
+
const o = raw;
|
|
11463
|
+
if (o.kind !== "number_stepper") return raw;
|
|
11464
|
+
if (Array.isArray(o.children) && o.children.length > 0) return raw;
|
|
11465
|
+
const idBase = typeof o.id === "string" ? o.id : "lyr_number_stepper";
|
|
11466
|
+
const slugRaw = idBase.replace(/^lyr_/i, "").replace(/[^a-z0-9_]/gi, "_");
|
|
11467
|
+
const slug = slugRaw.length > 0 ? slugRaw.slice(0, 40) : "stepper";
|
|
11468
|
+
const valueStyle = o.valueStyle && typeof o.valueStyle === "object" ? o.valueStyle : void 0;
|
|
11469
|
+
const buttonColor = o.buttonColor;
|
|
11470
|
+
const mkButton = (role, glyph) => {
|
|
11471
|
+
const suf = role === "decrement" ? "dec" : "inc";
|
|
11472
|
+
return {
|
|
11473
|
+
id: `lyr_${slug}_btn_${suf}`.slice(0, 64),
|
|
11474
|
+
kind: "number_stepper_button",
|
|
11475
|
+
role,
|
|
11476
|
+
style: {
|
|
11477
|
+
width: 36,
|
|
11478
|
+
height: 36,
|
|
11479
|
+
radius: 8
|
|
11480
|
+
},
|
|
11481
|
+
children: [
|
|
11482
|
+
{
|
|
11483
|
+
id: `lyr_${slug}_btn_${suf}_txt`.slice(0, 64),
|
|
11484
|
+
kind: "text",
|
|
11485
|
+
text: { default: glyph },
|
|
11486
|
+
style: {
|
|
11487
|
+
fontSize: 20,
|
|
11488
|
+
align: "center",
|
|
11489
|
+
...buttonColor !== void 0 ? { color: buttonColor } : {}
|
|
11490
|
+
}
|
|
11491
|
+
}
|
|
11492
|
+
]
|
|
11493
|
+
};
|
|
11494
|
+
};
|
|
11495
|
+
const valueChild = {
|
|
11496
|
+
id: `lyr_${slug}_value`.slice(0, 64),
|
|
11497
|
+
kind: "number_stepper_value",
|
|
11498
|
+
style: {
|
|
11499
|
+
fontSize: typeof valueStyle?.fontSize === "number" ? valueStyle.fontSize : 14,
|
|
11500
|
+
width: "full",
|
|
11501
|
+
...typeof valueStyle?.fontFamily === "string" ? { fontFamily: valueStyle.fontFamily } : {},
|
|
11502
|
+
...typeof valueStyle?.fontWeight === "number" ? { fontWeight: valueStyle.fontWeight } : {},
|
|
11503
|
+
...valueStyle?.color !== void 0 ? { color: valueStyle.color } : {},
|
|
11504
|
+
...typeof valueStyle?.lineHeight === "number" ? { lineHeight: valueStyle.lineHeight } : {},
|
|
11505
|
+
...typeof valueStyle?.letterSpacing === "number" ? { letterSpacing: valueStyle.letterSpacing } : {},
|
|
11506
|
+
...typeof valueStyle?.opacity === "number" ? { opacity: valueStyle.opacity } : {},
|
|
11507
|
+
align: typeof valueStyle?.align === "string" ? valueStyle.align : "center"
|
|
11508
|
+
}
|
|
11509
|
+
};
|
|
11510
|
+
if (o.unitLabel !== void 0) valueChild.unitLabel = o.unitLabel;
|
|
11511
|
+
const {
|
|
11512
|
+
valueStyle: _vs,
|
|
11513
|
+
buttonColor: _bc,
|
|
11514
|
+
unitLabel: _ul,
|
|
11515
|
+
...rest
|
|
11516
|
+
} = o;
|
|
11517
|
+
return {
|
|
11518
|
+
...rest,
|
|
11519
|
+
direction: typeof o.direction === "string" ? o.direction : "horizontal",
|
|
11520
|
+
gap: typeof o.gap === "number" ? o.gap : 12,
|
|
11521
|
+
align: typeof o.align === "string" ? o.align : "center",
|
|
11522
|
+
...typeof o.distribution === "string" ? { distribution: o.distribution } : {},
|
|
11523
|
+
children: [mkButton("decrement", "-"), valueChild, mkButton("increment", "+")]
|
|
11524
|
+
};
|
|
11525
|
+
};
|
|
11526
|
+
var refineNumberStepperChildren4 = (data, ctx) => {
|
|
11527
|
+
const buttons = data.children.filter((c) => c.kind === "number_stepper_button");
|
|
11528
|
+
const values = data.children.filter((c) => c.kind === "number_stepper_value");
|
|
11529
|
+
const other = data.children.filter(
|
|
11530
|
+
(c) => c.kind !== "number_stepper_button" && c.kind !== "number_stepper_value"
|
|
11531
|
+
);
|
|
11532
|
+
if (other.length > 0) {
|
|
11533
|
+
ctx.addIssue({
|
|
11534
|
+
code: external_exports.ZodIssueCode.custom,
|
|
11535
|
+
message: "number_stepper children must be number_stepper_button or number_stepper_value",
|
|
11536
|
+
path: ["children"]
|
|
11537
|
+
});
|
|
11538
|
+
}
|
|
11539
|
+
const roles = /* @__PURE__ */ new Set();
|
|
11540
|
+
for (const b of buttons) {
|
|
11541
|
+
if (b.kind !== "number_stepper_button") continue;
|
|
11542
|
+
if (roles.has(b.role)) {
|
|
11543
|
+
ctx.addIssue({
|
|
11544
|
+
code: external_exports.ZodIssueCode.custom,
|
|
11545
|
+
message: `duplicate number_stepper_button role "${b.role}"`,
|
|
11546
|
+
path: ["children"]
|
|
11547
|
+
});
|
|
11548
|
+
}
|
|
11549
|
+
roles.add(b.role);
|
|
11550
|
+
}
|
|
11551
|
+
for (const role of NUMBER_STEPPER_BUTTON_ROLES4) {
|
|
11552
|
+
if (!roles.has(role)) {
|
|
11553
|
+
ctx.addIssue({
|
|
11554
|
+
code: external_exports.ZodIssueCode.custom,
|
|
11555
|
+
message: `number_stepper requires a number_stepper_button with role "${role}"`,
|
|
11556
|
+
path: ["children"]
|
|
11557
|
+
});
|
|
11558
|
+
}
|
|
11559
|
+
}
|
|
11560
|
+
if (values.length !== 1) {
|
|
11561
|
+
ctx.addIssue({
|
|
11562
|
+
code: external_exports.ZodIssueCode.custom,
|
|
11563
|
+
message: `number_stepper must have exactly one number_stepper_value (found ${values.length})`,
|
|
11564
|
+
path: ["children"]
|
|
11565
|
+
});
|
|
11566
|
+
}
|
|
11567
|
+
};
|
|
11568
|
+
var NumberStepperLayerSchemaValidated4 = external_exports.object({
|
|
11569
|
+
...baseLayerShape4,
|
|
11570
|
+
kind: external_exports.literal("number_stepper"),
|
|
11571
|
+
fieldKey: FieldKeySchema5,
|
|
11572
|
+
min: external_exports.number(),
|
|
11573
|
+
max: external_exports.number(),
|
|
11574
|
+
step: external_exports.number().positive().optional(),
|
|
11575
|
+
defaultValue: external_exports.number().optional(),
|
|
11576
|
+
classification: FieldClassificationSchema5,
|
|
11577
|
+
direction: external_exports.enum(["vertical", "horizontal"]).optional(),
|
|
11578
|
+
gap: external_exports.number().int().min(0).max(64).optional(),
|
|
11579
|
+
align: external_exports.enum(["start", "center", "end", "stretch"]).optional(),
|
|
11580
|
+
distribution: external_exports.enum(["start", "center", "end", "between", "around"]).optional(),
|
|
11581
|
+
children: external_exports.lazy(
|
|
11582
|
+
() => external_exports.array(external_exports.union([NumberStepperButtonLayerSchema4, NumberStepperValueLayerSchema4])).min(1)
|
|
11583
|
+
),
|
|
11584
|
+
style: CommonStyleSchema4.optional(),
|
|
11585
|
+
styleBreakpoints: CommonStyleBreakpointsSchema4
|
|
11586
|
+
}).superRefine(refineNumberStepperChildren4);
|
|
11587
|
+
var NumberStepperLayerSchema4 = external_exports.preprocess(
|
|
11588
|
+
migrateNumberStepperIncoming4,
|
|
11589
|
+
NumberStepperLayerSchemaValidated4
|
|
11590
|
+
);
|
|
11591
|
+
var PhoneInputLayerSchema4 = external_exports.object({
|
|
11592
|
+
...baseLayerShape4,
|
|
11593
|
+
kind: external_exports.literal("phone_input"),
|
|
11594
|
+
fieldKey: FieldKeySchema5,
|
|
11595
|
+
defaultCountryCode: CountryCodeSchema4.optional(),
|
|
11596
|
+
allowedCountryCodes: external_exports.array(CountryCodeSchema4).min(1).max(250).optional(),
|
|
11597
|
+
required: external_exports.boolean().optional(),
|
|
11598
|
+
placeholder: LocalizedTextSchema5.optional(),
|
|
11599
|
+
classification: FieldClassificationSchema5,
|
|
11600
|
+
children: external_exports.lazy(() => external_exports.array(lazyLayer64())).optional(),
|
|
11601
|
+
fieldStyle: TextInputFieldStyleSchema4.optional(),
|
|
11602
|
+
style: CommonStyleSchema4.optional(),
|
|
11603
|
+
styleBreakpoints: CommonStyleBreakpointsSchema4
|
|
11604
|
+
});
|
|
11605
|
+
var AddressInputFieldSchema4 = external_exports.enum(ADDRESS_INPUT_FIELDS4);
|
|
11606
|
+
var AddressInputPlaceholdersSchema4 = external_exports.object({
|
|
11607
|
+
line1: LocalizedTextSchema5.optional(),
|
|
11608
|
+
line2: LocalizedTextSchema5.optional(),
|
|
11609
|
+
city: LocalizedTextSchema5.optional(),
|
|
11610
|
+
region: LocalizedTextSchema5.optional(),
|
|
11611
|
+
postalCode: LocalizedTextSchema5.optional(),
|
|
11612
|
+
country: LocalizedTextSchema5.optional()
|
|
11613
|
+
}).partial();
|
|
11614
|
+
var AddressInputLayerSchema4 = external_exports.object({
|
|
11615
|
+
...baseLayerShape4,
|
|
11616
|
+
kind: external_exports.literal("address_input"),
|
|
11617
|
+
fieldKey: FieldKeySchema5,
|
|
11618
|
+
requiredFields: external_exports.array(AddressInputFieldSchema4).min(1).max(6).optional(),
|
|
11619
|
+
showLine2: external_exports.boolean().optional(),
|
|
11620
|
+
showRegion: external_exports.boolean().optional(),
|
|
11621
|
+
defaultCountryCode: CountryCodeSchema4.optional(),
|
|
11622
|
+
placeholders: AddressInputPlaceholdersSchema4.optional(),
|
|
11623
|
+
classification: FieldClassificationSchema5,
|
|
11624
|
+
children: external_exports.lazy(() => external_exports.array(lazyLayer64())).optional(),
|
|
11625
|
+
fieldStyle: TextInputFieldStyleSchema4.optional(),
|
|
11626
|
+
gap: external_exports.number().int().min(0).max(64).optional(),
|
|
11627
|
+
style: CommonStyleSchema4.optional(),
|
|
11628
|
+
styleBreakpoints: CommonStyleBreakpointsSchema4
|
|
11629
|
+
});
|
|
10522
11630
|
var CarouselIndicatorsStyleSchema4 = external_exports.object({
|
|
10523
11631
|
width: external_exports.number().int().min(1).max(64).optional(),
|
|
10524
11632
|
height: external_exports.number().int().min(1).max(64).optional(),
|
|
@@ -10653,6 +11761,12 @@ layerSchemaStore4.schema = external_exports.lazy(
|
|
|
10653
11761
|
TextInputLayerSchema4,
|
|
10654
11762
|
ScaleInputLayerSchema4,
|
|
10655
11763
|
WheelPickerLayerSchema4,
|
|
11764
|
+
DateTimeInputLayerSchema4,
|
|
11765
|
+
NumberStepperLayerSchema4,
|
|
11766
|
+
NumberStepperButtonLayerSchema4,
|
|
11767
|
+
NumberStepperValueLayerSchema4,
|
|
11768
|
+
PhoneInputLayerSchema4,
|
|
11769
|
+
AddressInputLayerSchema4,
|
|
10656
11770
|
OAuthLoginLayerSchema4,
|
|
10657
11771
|
OAuthProviderPresetLayerSchema4,
|
|
10658
11772
|
OAuthProviderCustomLayerSchema4,
|
|
@@ -10891,7 +12005,7 @@ var walkLayers = (root, fn) => {
|
|
|
10891
12005
|
else if (l.kind === "hyperlink") l.children.forEach((c) => visit(c, depth + 1));
|
|
10892
12006
|
else if (l.kind === "single_choice" || l.kind === "multiple_choice") {
|
|
10893
12007
|
l.children.forEach((c) => visit(c, depth + 1));
|
|
10894
|
-
} else if (l.kind === "text_input" || l.kind === "scale_input" || l.kind === "wheel_picker") {
|
|
12008
|
+
} else if (l.kind === "text_input" || l.kind === "scale_input" || l.kind === "wheel_picker" || l.kind === "date_time_input" || l.kind === "phone_input" || l.kind === "address_input") {
|
|
10895
12009
|
l.children?.forEach((c) => visit(c, depth + 1));
|
|
10896
12010
|
} else if (l.kind === "oauth_login") {
|
|
10897
12011
|
l.children.forEach((c) => visit(c, depth + 1));
|
|
@@ -10903,6 +12017,10 @@ var walkLayers = (root, fn) => {
|
|
|
10903
12017
|
l.children?.forEach((c) => visit(c, depth + 1));
|
|
10904
12018
|
} else if (l.kind === "email_password_submit") {
|
|
10905
12019
|
l.children.forEach((c) => visit(c, depth + 1));
|
|
12020
|
+
} else if (l.kind === "number_stepper") {
|
|
12021
|
+
l.children.forEach((c) => visit(c, depth + 1));
|
|
12022
|
+
} else if (l.kind === "number_stepper_button") {
|
|
12023
|
+
l.children?.forEach((c) => visit(c, depth + 1));
|
|
10906
12024
|
}
|
|
10907
12025
|
};
|
|
10908
12026
|
visit(root, 0);
|
|
@@ -11134,6 +12252,7 @@ var validatePublishable = (manifest) => {
|
|
|
11134
12252
|
}
|
|
11135
12253
|
return { ok: issues.length === 0, issues, warnings };
|
|
11136
12254
|
};
|
|
12255
|
+
var isManualSubmitKind = (kind) => MANUAL_SUBMIT_INPUT_KINDS.includes(kind);
|
|
11137
12256
|
var FIELD_KEY_RE6 = /^[a-z][a-z0-9_]*$/;
|
|
11138
12257
|
var styleBucketHasColor = (s) => s !== void 0 && s.color !== void 0;
|
|
11139
12258
|
var textLayerHasAuthoringColor = (l) => {
|
|
@@ -11239,7 +12358,7 @@ var collectFlowBuilderIssues = (manifest) => {
|
|
|
11239
12358
|
}
|
|
11240
12359
|
if (isInputLayer(l)) {
|
|
11241
12360
|
inputCount += 1;
|
|
11242
|
-
if (l.kind
|
|
12361
|
+
if (isManualSubmitKind(l.kind)) {
|
|
11243
12362
|
needsManualSubmit = true;
|
|
11244
12363
|
}
|
|
11245
12364
|
const key = l.fieldKey;
|
|
@@ -11436,7 +12555,7 @@ var collectFlowBuilderIssues = (manifest) => {
|
|
|
11436
12555
|
}
|
|
11437
12556
|
if (needsManualSubmit && !hasContinueButton) {
|
|
11438
12557
|
issues.push(
|
|
11439
|
-
`Screen "${screen.name || screen.id}" has a
|
|
12558
|
+
`Screen "${screen.name || screen.id}" has a manual-submit input (text, scale, wheel, date/time, stepper, phone, address, or multiple choice) but no Button with action "continue". Add a Continue button so users can submit.`
|
|
11440
12559
|
);
|
|
11441
12560
|
}
|
|
11442
12561
|
}
|
|
@@ -11681,6 +12800,20 @@ var scanLayer = (issues, screen, layer, branding) => {
|
|
|
11681
12800
|
branding
|
|
11682
12801
|
);
|
|
11683
12802
|
return;
|
|
12803
|
+
case "date_time_input":
|
|
12804
|
+
case "phone_input":
|
|
12805
|
+
case "address_input":
|
|
12806
|
+
walkCommonBreakpoints(issues, stepId, id, layer.style, void 0, branding);
|
|
12807
|
+
return;
|
|
12808
|
+
case "number_stepper":
|
|
12809
|
+
walkCommonBreakpoints(issues, stepId, id, layer.style, layer.styleBreakpoints, branding);
|
|
12810
|
+
return;
|
|
12811
|
+
case "number_stepper_button":
|
|
12812
|
+
walkCommonBreakpoints(issues, stepId, id, layer.style, layer.styleBreakpoints, branding);
|
|
12813
|
+
return;
|
|
12814
|
+
case "number_stepper_value":
|
|
12815
|
+
walkTextBreakpoints(issues, stepId, id, layer.style, layer.styleBreakpoints, branding);
|
|
12816
|
+
return;
|
|
11684
12817
|
case "oauth_login":
|
|
11685
12818
|
walkCommonBreakpoints(issues, stepId, id, layer.style, layer.styleBreakpoints, branding);
|
|
11686
12819
|
return;
|
|
@@ -11766,6 +12899,62 @@ var RESTING_MOTION_KEYFRAMES_CSS = `
|
|
|
11766
12899
|
100% { transform: rotate(var(--ob-rm-rotate-peak, 5deg)); }
|
|
11767
12900
|
}
|
|
11768
12901
|
`.trim();
|
|
12902
|
+
var COUNTRY_DIAL_ENTRIES = [
|
|
12903
|
+
{ code: "US", dial: "1", label: "United States" },
|
|
12904
|
+
{ code: "CA", dial: "1", label: "Canada" },
|
|
12905
|
+
{ code: "GB", dial: "44", label: "United Kingdom" },
|
|
12906
|
+
{ code: "AU", dial: "61", label: "Australia" },
|
|
12907
|
+
{ code: "NZ", dial: "64", label: "New Zealand" },
|
|
12908
|
+
{ code: "IE", dial: "353", label: "Ireland" },
|
|
12909
|
+
{ code: "DE", dial: "49", label: "Germany" },
|
|
12910
|
+
{ code: "FR", dial: "33", label: "France" },
|
|
12911
|
+
{ code: "ES", dial: "34", label: "Spain" },
|
|
12912
|
+
{ code: "IT", dial: "39", label: "Italy" },
|
|
12913
|
+
{ code: "PT", dial: "351", label: "Portugal" },
|
|
12914
|
+
{ code: "NL", dial: "31", label: "Netherlands" },
|
|
12915
|
+
{ code: "BE", dial: "32", label: "Belgium" },
|
|
12916
|
+
{ code: "CH", dial: "41", label: "Switzerland" },
|
|
12917
|
+
{ code: "AT", dial: "43", label: "Austria" },
|
|
12918
|
+
{ code: "SE", dial: "46", label: "Sweden" },
|
|
12919
|
+
{ code: "NO", dial: "47", label: "Norway" },
|
|
12920
|
+
{ code: "DK", dial: "45", label: "Denmark" },
|
|
12921
|
+
{ code: "FI", dial: "358", label: "Finland" },
|
|
12922
|
+
{ code: "PL", dial: "48", label: "Poland" },
|
|
12923
|
+
{ code: "CZ", dial: "420", label: "Czechia" },
|
|
12924
|
+
{ code: "RO", dial: "40", label: "Romania" },
|
|
12925
|
+
{ code: "HU", dial: "36", label: "Hungary" },
|
|
12926
|
+
{ code: "GR", dial: "30", label: "Greece" },
|
|
12927
|
+
{ code: "TR", dial: "90", label: "Turkey" },
|
|
12928
|
+
{ code: "UA", dial: "380", label: "Ukraine" },
|
|
12929
|
+
{ code: "RU", dial: "7", label: "Russia" },
|
|
12930
|
+
{ code: "IN", dial: "91", label: "India" },
|
|
12931
|
+
{ code: "PK", dial: "92", label: "Pakistan" },
|
|
12932
|
+
{ code: "BD", dial: "880", label: "Bangladesh" },
|
|
12933
|
+
{ code: "JP", dial: "81", label: "Japan" },
|
|
12934
|
+
{ code: "KR", dial: "82", label: "South Korea" },
|
|
12935
|
+
{ code: "CN", dial: "86", label: "China" },
|
|
12936
|
+
{ code: "TW", dial: "886", label: "Taiwan" },
|
|
12937
|
+
{ code: "HK", dial: "852", label: "Hong Kong" },
|
|
12938
|
+
{ code: "SG", dial: "65", label: "Singapore" },
|
|
12939
|
+
{ code: "MY", dial: "60", label: "Malaysia" },
|
|
12940
|
+
{ code: "TH", dial: "66", label: "Thailand" },
|
|
12941
|
+
{ code: "VN", dial: "84", label: "Vietnam" },
|
|
12942
|
+
{ code: "PH", dial: "63", label: "Philippines" },
|
|
12943
|
+
{ code: "ID", dial: "62", label: "Indonesia" },
|
|
12944
|
+
{ code: "BR", dial: "55", label: "Brazil" },
|
|
12945
|
+
{ code: "MX", dial: "52", label: "Mexico" },
|
|
12946
|
+
{ code: "AR", dial: "54", label: "Argentina" },
|
|
12947
|
+
{ code: "CL", dial: "56", label: "Chile" },
|
|
12948
|
+
{ code: "CO", dial: "57", label: "Colombia" },
|
|
12949
|
+
{ code: "PE", dial: "51", label: "Peru" },
|
|
12950
|
+
{ code: "ZA", dial: "27", label: "South Africa" },
|
|
12951
|
+
{ code: "NG", dial: "234", label: "Nigeria" },
|
|
12952
|
+
{ code: "EG", dial: "20", label: "Egypt" },
|
|
12953
|
+
{ code: "IL", dial: "972", label: "Israel" },
|
|
12954
|
+
{ code: "AE", dial: "971", label: "United Arab Emirates" },
|
|
12955
|
+
{ code: "SA", dial: "966", label: "Saudi Arabia" }
|
|
12956
|
+
];
|
|
12957
|
+
var byCode = new Map(COUNTRY_DIAL_ENTRIES.map((e) => [e.code, e]));
|
|
11769
12958
|
var extractLiquidTemplateBodies = (s) => {
|
|
11770
12959
|
const out = [];
|
|
11771
12960
|
let i = 0;
|
|
@@ -12044,6 +13233,8 @@ var GAP_BY_KIND = {
|
|
|
12044
13233
|
oauth_login: 8,
|
|
12045
13234
|
email_password_auth: 8,
|
|
12046
13235
|
email_password_submit: 8,
|
|
13236
|
+
number_stepper: 12,
|
|
13237
|
+
address_input: 8,
|
|
12047
13238
|
button: 8,
|
|
12048
13239
|
back_button: 8,
|
|
12049
13240
|
oauth_provider: 8,
|
|
@@ -12095,13 +13286,21 @@ var defaultLayoutStyleForKind = (kind) => {
|
|
|
12095
13286
|
case "oauth_provider":
|
|
12096
13287
|
case "email_password_submit":
|
|
12097
13288
|
return LAYOUT_FULL_HUG;
|
|
13289
|
+
case "number_stepper_button":
|
|
13290
|
+
return LAYOUT_HUG_HUG;
|
|
12098
13291
|
case "text_input":
|
|
12099
13292
|
case "scale_input":
|
|
12100
13293
|
case "wheel_picker":
|
|
13294
|
+
case "date_time_input":
|
|
13295
|
+
case "number_stepper":
|
|
13296
|
+
case "phone_input":
|
|
13297
|
+
case "address_input":
|
|
12101
13298
|
case "email_password_auth":
|
|
12102
13299
|
case "email_password_field":
|
|
12103
13300
|
case "oauth_login":
|
|
12104
13301
|
return LAYOUT_FULL_FILL;
|
|
13302
|
+
case "number_stepper_value":
|
|
13303
|
+
return LAYOUT_FULL_HUG;
|
|
12105
13304
|
case "progress":
|
|
12106
13305
|
return LAYOUT_PROGRESS;
|
|
12107
13306
|
case "loader":
|
|
@@ -12313,7 +13512,7 @@ var walkLayers2 = (root, fn) => {
|
|
|
12313
13512
|
else if (l.kind === "hyperlink") l.children.forEach((c) => visit(c, depth + 1));
|
|
12314
13513
|
else if (l.kind === "single_choice" || l.kind === "multiple_choice") {
|
|
12315
13514
|
l.children.forEach((c) => visit(c, depth + 1));
|
|
12316
|
-
} else if (l.kind === "text_input" || l.kind === "scale_input" || l.kind === "wheel_picker") {
|
|
13515
|
+
} else if (l.kind === "text_input" || l.kind === "scale_input" || l.kind === "wheel_picker" || l.kind === "date_time_input" || l.kind === "phone_input" || l.kind === "address_input") {
|
|
12317
13516
|
l.children?.forEach((c) => visit(c, depth + 1));
|
|
12318
13517
|
} else if (l.kind === "oauth_login") {
|
|
12319
13518
|
l.children.forEach((c) => visit(c, depth + 1));
|
|
@@ -12325,6 +13524,10 @@ var walkLayers2 = (root, fn) => {
|
|
|
12325
13524
|
l.children?.forEach((c) => visit(c, depth + 1));
|
|
12326
13525
|
} else if (l.kind === "email_password_submit") {
|
|
12327
13526
|
l.children.forEach((c) => visit(c, depth + 1));
|
|
13527
|
+
} else if (l.kind === "number_stepper") {
|
|
13528
|
+
l.children.forEach((c) => visit(c, depth + 1));
|
|
13529
|
+
} else if (l.kind === "number_stepper_button") {
|
|
13530
|
+
l.children?.forEach((c) => visit(c, depth + 1));
|
|
12328
13531
|
}
|
|
12329
13532
|
};
|
|
12330
13533
|
visit(root, 0);
|
|
@@ -12390,6 +13593,10 @@ var IMPORT_PUBLISH_INTEGRATIONS = {
|
|
|
12390
13593
|
defaultOfferingId: "default",
|
|
12391
13594
|
defaultPlacementId: ""
|
|
12392
13595
|
},
|
|
13596
|
+
superwall: {
|
|
13597
|
+
enabled: true,
|
|
13598
|
+
defaultPlacementId: "campaign_trigger"
|
|
13599
|
+
},
|
|
12393
13600
|
appsflyer: { enabled: false }
|
|
12394
13601
|
};
|
|
12395
13602
|
var toBlocking = (issues, fixForCode) => issues.map((issue) => ({
|
|
@@ -12466,8 +13673,11 @@ var fixForBuilderMessage = (message) => {
|
|
|
12466
13673
|
if (message.includes("RevenueCat")) {
|
|
12467
13674
|
return "Enable RevenueCat in App settings \u2192 Integrations, or remove RevenueCat external surfaces from the import manifest.";
|
|
12468
13675
|
}
|
|
13676
|
+
if (message.includes("Superwall")) {
|
|
13677
|
+
return "Enable Superwall in App settings \u2192 Integrations, or remove Superwall external surfaces from the import manifest.";
|
|
13678
|
+
}
|
|
12469
13679
|
if (message.includes("integration provider")) {
|
|
12470
|
-
return "Set externalSurfaceNodes[].config.provider to a real provider (e.g. revenuecat), not unspecified.";
|
|
13680
|
+
return "Set externalSurfaceNodes[].config.provider to a real provider (e.g. revenuecat or superwall), not unspecified.";
|
|
12471
13681
|
}
|
|
12472
13682
|
if (message.includes("Fallback edge")) {
|
|
12473
13683
|
return "Connect every external surface fallback to the next screen/decision/surface when no specific outcome is mapped.";
|
|
@@ -12492,6 +13702,11 @@ var collectIntegrationIssues = (manifest, integrations) => {
|
|
|
12492
13702
|
`External surface "${node.name ?? node.id}" uses RevenueCat, but the integration is disabled. Enable it in App Settings \u2192 Integrations.`
|
|
12493
13703
|
);
|
|
12494
13704
|
}
|
|
13705
|
+
if (node.config.provider === "superwall" && !integrations.superwall.enabled) {
|
|
13706
|
+
issues.push(
|
|
13707
|
+
`External surface "${node.name ?? node.id}" uses Superwall, but the integration is disabled. Enable it in App Settings \u2192 Integrations.`
|
|
13708
|
+
);
|
|
13709
|
+
}
|
|
12495
13710
|
}
|
|
12496
13711
|
return issues.map((message) => ({
|
|
12497
13712
|
severity: "blocking",
|
|
@@ -14730,7 +15945,7 @@ var renderPublishGateMarkdown = (manifestPath, result) => {
|
|
|
14730
15945
|
"- Schema: valid FlowManifest (Zod)",
|
|
14731
15946
|
"- Builder: text/icon `style.color`, Continue on manual-submit inputs, one input per screen, valid graph targets, media triggers",
|
|
14732
15947
|
"- Publishable: entry connected, completion path, decision branches wired",
|
|
14733
|
-
"- Integrations: external surfaces have provider + fallback; RevenueCat enabled when used",
|
|
15948
|
+
"- Integrations: external surfaces have provider + fallback; RevenueCat / Superwall enabled when used",
|
|
14734
15949
|
"- Canvas gates: no disabled layer types (default import assumes all enabled)",
|
|
14735
15950
|
"- Branding gradients: `$brandGradient:` only on backgrounds; known preset ids when branding is provided",
|
|
14736
15951
|
"",
|
|
@@ -15039,7 +16254,7 @@ var ScreenSpecSchema = external_exports.object({
|
|
|
15039
16254
|
var ExternalSurfaceSpecSchema = external_exports.object({
|
|
15040
16255
|
id: external_exports.string().min(1).max(64),
|
|
15041
16256
|
name: external_exports.string().min(1).max(80).optional(),
|
|
15042
|
-
provider: external_exports.enum(["revenuecat", "headless", "unspecified"]),
|
|
16257
|
+
provider: external_exports.enum(["revenuecat", "superwall", "headless", "unspecified"]),
|
|
15043
16258
|
offeringId: external_exports.string().min(1).max(128).optional(),
|
|
15044
16259
|
placementId: external_exports.string().min(1).max(128).optional(),
|
|
15045
16260
|
presentation: external_exports.enum(["paywall", "paywall_if_needed"]).optional(),
|
|
@@ -15556,6 +16771,9 @@ var buildExternalSurface = (surface) => {
|
|
|
15556
16771
|
...surface.offeringId ? { offeringId: surface.offeringId } : {},
|
|
15557
16772
|
...surface.placementId ? { placementId: surface.placementId } : {},
|
|
15558
16773
|
...surface.presentation ? { presentation: surface.presentation } : {}
|
|
16774
|
+
} : surface.provider === "superwall" ? {
|
|
16775
|
+
provider: "superwall",
|
|
16776
|
+
...surface.placementId ? { placementId: surface.placementId } : {}
|
|
15559
16777
|
} : surface.provider === "headless" ? {
|
|
15560
16778
|
provider: "headless",
|
|
15561
16779
|
...surface.hostKey ? { hostKey: surface.hostKey } : {}
|