@portabletext/editor 1.48.7 → 1.48.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (128) hide show
  1. package/lib/_chunks-cjs/behavior.core.cjs +20 -8
  2. package/lib/_chunks-cjs/behavior.core.cjs.map +1 -1
  3. package/lib/_chunks-cjs/behavior.markdown.cjs +5 -5
  4. package/lib/_chunks-cjs/behavior.markdown.cjs.map +1 -1
  5. package/lib/_chunks-cjs/editor-provider.cjs +121 -90
  6. package/lib/_chunks-cjs/editor-provider.cjs.map +1 -1
  7. package/lib/_chunks-cjs/selector.get-focus-inline-object.cjs +2 -2
  8. package/lib/_chunks-cjs/selector.get-focus-inline-object.cjs.map +1 -1
  9. package/lib/_chunks-cjs/selector.get-text-before.cjs +7 -4
  10. package/lib/_chunks-cjs/selector.get-text-before.cjs.map +1 -1
  11. package/lib/_chunks-cjs/selector.is-overlapping-selection.cjs +63 -47
  12. package/lib/_chunks-cjs/selector.is-overlapping-selection.cjs.map +1 -1
  13. package/lib/_chunks-cjs/selector.is-selecting-entire-blocks.cjs +29 -23
  14. package/lib/_chunks-cjs/selector.is-selecting-entire-blocks.cjs.map +1 -1
  15. package/lib/_chunks-cjs/util.merge-text-blocks.cjs +3 -3
  16. package/lib/_chunks-cjs/util.merge-text-blocks.cjs.map +1 -1
  17. package/lib/_chunks-cjs/util.selection-point-to-block-offset.cjs +15 -15
  18. package/lib/_chunks-cjs/util.selection-point-to-block-offset.cjs.map +1 -1
  19. package/lib/_chunks-cjs/util.slice-blocks.cjs +258 -38
  20. package/lib/_chunks-cjs/util.slice-blocks.cjs.map +1 -1
  21. package/lib/_chunks-es/behavior.core.js +21 -10
  22. package/lib/_chunks-es/behavior.core.js.map +1 -1
  23. package/lib/_chunks-es/behavior.markdown.js +5 -6
  24. package/lib/_chunks-es/behavior.markdown.js.map +1 -1
  25. package/lib/_chunks-es/editor-provider.js +75 -46
  26. package/lib/_chunks-es/editor-provider.js.map +1 -1
  27. package/lib/_chunks-es/selector.get-focus-inline-object.js +1 -2
  28. package/lib/_chunks-es/selector.get-focus-inline-object.js.map +1 -1
  29. package/lib/_chunks-es/selector.get-text-before.js +7 -4
  30. package/lib/_chunks-es/selector.get-text-before.js.map +1 -1
  31. package/lib/_chunks-es/selector.is-overlapping-selection.js +61 -46
  32. package/lib/_chunks-es/selector.is-overlapping-selection.js.map +1 -1
  33. package/lib/_chunks-es/selector.is-selecting-entire-blocks.js +30 -26
  34. package/lib/_chunks-es/selector.is-selecting-entire-blocks.js.map +1 -1
  35. package/lib/_chunks-es/util.merge-text-blocks.js +1 -1
  36. package/lib/_chunks-es/util.selection-point-to-block-offset.js +15 -16
  37. package/lib/_chunks-es/util.selection-point-to-block-offset.js.map +1 -1
  38. package/lib/_chunks-es/util.slice-blocks.js +258 -38
  39. package/lib/_chunks-es/util.slice-blocks.js.map +1 -1
  40. package/lib/behaviors/index.d.cts +2552 -251
  41. package/lib/behaviors/index.d.ts +2552 -251
  42. package/lib/index.cjs +45 -21
  43. package/lib/index.cjs.map +1 -1
  44. package/lib/index.d.cts +2350 -51
  45. package/lib/index.d.ts +2350 -51
  46. package/lib/index.js +44 -21
  47. package/lib/index.js.map +1 -1
  48. package/lib/plugins/index.cjs +16 -7
  49. package/lib/plugins/index.cjs.map +1 -1
  50. package/lib/plugins/index.d.cts +2324 -24
  51. package/lib/plugins/index.d.ts +2324 -24
  52. package/lib/plugins/index.js +16 -7
  53. package/lib/plugins/index.js.map +1 -1
  54. package/lib/selectors/index.cjs +5 -5
  55. package/lib/selectors/index.cjs.map +1 -1
  56. package/lib/selectors/index.d.cts +2321 -28
  57. package/lib/selectors/index.d.ts +2321 -28
  58. package/lib/selectors/index.js +5 -6
  59. package/lib/selectors/index.js.map +1 -1
  60. package/lib/utils/index.cjs +30 -24
  61. package/lib/utils/index.cjs.map +1 -1
  62. package/lib/utils/index.d.cts +2350 -44
  63. package/lib/utils/index.d.ts +2350 -44
  64. package/lib/utils/index.js +30 -24
  65. package/lib/utils/index.js.map +1 -1
  66. package/package.json +1 -2
  67. package/src/behavior-actions/behavior.action.block.unset.ts +1 -1
  68. package/src/behavior-actions/behavior.action.decorator.add.ts +20 -5
  69. package/src/behaviors/behavior.abstract.decorator.ts +1 -1
  70. package/src/behaviors/behavior.abstract.delete.ts +1 -1
  71. package/src/behaviors/behavior.abstract.insert.ts +2 -2
  72. package/src/behaviors/behavior.abstract.select.ts +16 -4
  73. package/src/behaviors/behavior.abstract.split.ts +9 -6
  74. package/src/behaviors/behavior.core.block-objects.ts +5 -5
  75. package/src/behaviors/behavior.core.insert-break.ts +16 -4
  76. package/src/behaviors/behavior.core.lists.ts +4 -6
  77. package/src/behaviors/behavior.decorator-pair.ts +13 -4
  78. package/src/behaviors/behavior.default.ts +1 -1
  79. package/src/behaviors/behavior.markdown.ts +5 -5
  80. package/src/converters/converter.portable-text.ts +1 -1
  81. package/src/converters/converter.text-html.ts +1 -1
  82. package/src/converters/converter.text-plain.ts +4 -4
  83. package/src/editor/plugins/__tests__/withEditableAPIGetFragment.test.tsx +10 -2
  84. package/src/editor/plugins/createWithSchemaTypes.ts +12 -19
  85. package/src/internal-utils/__tests__/dmpToOperations.test.ts +13 -12
  86. package/src/internal-utils/drag-selection.ts +16 -4
  87. package/src/internal-utils/event-position.ts +20 -8
  88. package/src/internal-utils/parse-blocks.ts +17 -5
  89. package/src/internal-utils/validateValue.ts +6 -6
  90. package/src/plugins/plugin.decorator-shortcut.ts +2 -2
  91. package/src/selectors/selector.get-active-annotations.ts +5 -2
  92. package/src/selectors/selector.get-active-list-item.ts +4 -3
  93. package/src/selectors/selector.get-active-style.ts +4 -3
  94. package/src/selectors/selector.get-anchor-text-block.ts +3 -6
  95. package/src/selectors/selector.get-block-offsets.ts +2 -2
  96. package/src/selectors/selector.get-caret-word-selection.ts +11 -5
  97. package/src/selectors/selector.get-selected-slice.ts +1 -1
  98. package/src/selectors/selector.get-selected-spans.ts +11 -15
  99. package/src/selectors/selector.get-selected-text-blocks.ts +3 -3
  100. package/src/selectors/selector.get-selection-text.ts +3 -3
  101. package/src/selectors/selector.get-text-before.ts +5 -2
  102. package/src/selectors/selector.get-trimmed-selection.ts +20 -14
  103. package/src/selectors/selector.is-active-annotation.ts +4 -2
  104. package/src/selectors/selector.is-active-decorator.test.ts +3 -3
  105. package/src/selectors/selector.is-at-the-end-of-block.ts +4 -1
  106. package/src/selectors/selector.is-at-the-start-of-block.ts +4 -1
  107. package/src/selectors/selector.is-point-after-selection.ts +7 -6
  108. package/src/selectors/selector.is-point-before-selection.ts +7 -6
  109. package/src/selectors/selector.is-selecting-entire-blocks.ts +8 -2
  110. package/src/selectors/selectors.ts +25 -28
  111. package/src/utils/util.block-offset-to-block-selection-point.ts +4 -4
  112. package/src/utils/util.block-offset-to-selection-point.ts +5 -5
  113. package/src/utils/util.block-offset.test.ts +219 -156
  114. package/src/utils/util.block-offset.ts +14 -17
  115. package/src/utils/util.block-offsets-to-selection.ts +5 -5
  116. package/src/utils/util.child-selection-point-to-block-offset.ts +7 -10
  117. package/src/utils/util.get-block-end-point.ts +15 -15
  118. package/src/utils/util.get-block-start-point.ts +13 -12
  119. package/src/utils/util.is-empty-text-block.ts +9 -8
  120. package/src/utils/util.selection-point-to-block-offset.ts +4 -4
  121. package/src/utils/util.slice-blocks.test.ts +178 -121
  122. package/src/utils/util.slice-blocks.ts +25 -24
  123. package/src/utils/util.split-text-block.ts +18 -12
  124. package/lib/_chunks-cjs/parse-blocks.cjs +0 -205
  125. package/lib/_chunks-cjs/parse-blocks.cjs.map +0 -1
  126. package/lib/_chunks-es/parse-blocks.js +0 -206
  127. package/lib/_chunks-es/parse-blocks.js.map +0 -1
  128. package/src/behavior-actions/behavior.guards.ts +0 -24
@@ -1,24 +1,16 @@
1
1
  import type {Patch} from '@portabletext/patches'
2
- import type {
3
- ArraySchemaType,
4
- BlockDecoratorDefinition,
5
- BlockListDefinition,
6
- BlockStyleDefinition,
7
- KeyedSegment,
8
- ObjectSchemaType,
9
- Path,
10
- PortableTextBlock,
11
- PortableTextChild,
12
- PortableTextListBlock,
13
- PortableTextObject,
14
- PortableTextSpan,
15
- PortableTextTextBlock,
16
- } from '@sanity/types'
2
+ import {ClientPerspective, SanityClient} from '@sanity/client'
3
+ import {
4
+ ComponentType,
5
+ ElementType,
6
+ JSX,
7
+ default as React_2,
8
+ ReactNode,
9
+ } from 'react'
17
10
  import type {
18
11
  FocusEvent as FocusEvent_2,
19
12
  KeyboardEvent as KeyboardEvent_2,
20
13
  } from 'react'
21
- import {JSX, default as React_2} from 'react'
22
14
  import type {Descendant, Operation, TextUnit} from 'slate'
23
15
  import type {DOMNode} from 'slate-dom'
24
16
  import type {ReactEditor} from 'slate-react'
@@ -216,6 +208,277 @@ declare const abstractBehaviorEventTypes: readonly [
216
208
  'style.toggle',
217
209
  ]
218
210
 
211
+ /**
212
+ * Types of array actions that can be performed
213
+ * @beta
214
+ */
215
+ declare type ArrayActionName =
216
+ /**
217
+ * Add any item to the array at any position
218
+ */
219
+ | 'add'
220
+ /**
221
+ * Add item after an existing item
222
+ */
223
+ | 'addBefore'
224
+ /**
225
+ * Add item after an existing item
226
+ */
227
+ | 'addAfter'
228
+ /**
229
+ * Remove any item
230
+ */
231
+ | 'remove'
232
+ /**
233
+ * Duplicate item
234
+ */
235
+ | 'duplicate'
236
+ /**
237
+ * Copy item
238
+ */
239
+ | 'copy'
240
+
241
+ /** @public */
242
+ declare interface ArrayDefinition extends BaseSchemaDefinition {
243
+ type: 'array'
244
+ of: ArrayOfType[]
245
+ initialValue?: InitialValueProperty<any, unknown[]>
246
+ validation?: ValidationBuilder<ArrayRule<unknown[]>, unknown[]>
247
+ options?: ArrayOptions
248
+ }
249
+
250
+ /** @public */
251
+ declare type ArrayOfEntry<T> = Omit<T, 'name' | 'hidden'> & {
252
+ name?: string
253
+ }
254
+
255
+ /** @public */
256
+ declare type ArrayOfType<
257
+ TType extends IntrinsicTypeName = IntrinsicTypeName,
258
+ TAlias extends IntrinsicTypeName | undefined = undefined,
259
+ > =
260
+ | IntrinsicArrayOfDefinition[TType]
261
+ | ArrayOfEntry<TypeAliasDefinition<string, TAlias>>
262
+
263
+ /** @public */
264
+ declare interface ArrayOptions<V = unknown>
265
+ extends SearchConfiguration,
266
+ BaseSchemaTypeOptions {
267
+ list?: TitledListValue<V>[] | V[]
268
+ layout?: 'list' | 'tags' | 'grid'
269
+ /** @deprecated This option does not have any effect anymore */
270
+ direction?: 'horizontal' | 'vertical'
271
+ sortable?: boolean
272
+ modal?: {
273
+ type?: 'dialog' | 'popover'
274
+ width?: number | 'auto'
275
+ }
276
+ /** @alpha This API may change */
277
+ insertMenu?: InsertMenuOptions
278
+ /**
279
+ * A boolean flag to enable or disable tree editing for the array.
280
+ * If there are any nested arrays, they will inherit this value.
281
+ * @deprecated tree editing beta feature has been disabled
282
+ */
283
+ treeEditing?: boolean
284
+ /**
285
+ * A list of array actions to disable
286
+ * Possible options are defined by {@link ArrayActionName}
287
+ * @beta
288
+ */
289
+ disableActions?: ArrayActionName[]
290
+ }
291
+
292
+ /** @public */
293
+ declare interface ArrayRule<Value> extends RuleDef<ArrayRule<Value>, Value> {
294
+ min: (length: number | FieldReference) => ArrayRule<Value>
295
+ max: (length: number | FieldReference) => ArrayRule<Value>
296
+ length: (length: number | FieldReference) => ArrayRule<Value>
297
+ unique: () => ArrayRule<Value>
298
+ }
299
+
300
+ /** @public */
301
+ declare interface ArraySchemaType<V = unknown> extends BaseSchemaType {
302
+ jsonType: 'array'
303
+ of: (Exclude<SchemaType, ArraySchemaType> | ReferenceSchemaType)[]
304
+ options?: ArrayOptions<V> & {
305
+ layout?: V extends string ? 'tag' : 'grid'
306
+ }
307
+ }
308
+
309
+ /** @public */
310
+ declare interface Asset extends SanityDocument {
311
+ url: string
312
+ path: string
313
+ assetId: string
314
+ extension: string
315
+ mimeType: string
316
+ sha1hash: string
317
+ size: number
318
+ originalFilename?: string
319
+ label?: string
320
+ title?: string
321
+ description?: string
322
+ creditLine?: string
323
+ source?: AssetSourceSpec
324
+ }
325
+
326
+ /** @public */
327
+ declare type AssetFromSource = {
328
+ kind: 'assetDocumentId' | 'file' | 'base64' | 'url'
329
+ value: string | File_2
330
+ assetDocumentProps?: ImageAsset
331
+ mediaLibraryProps?: {
332
+ mediaLibraryId: string
333
+ assetId: string
334
+ assetInstanceId: string
335
+ }
336
+ }
337
+
338
+ /** @public */
339
+ declare interface AssetSource {
340
+ name: string
341
+ /** @deprecated provide `i18nKey` instead */
342
+ title?: string
343
+ i18nKey?: string
344
+ component: ComponentType<AssetSourceComponentProps>
345
+ icon?: ComponentType<EmptyProps>
346
+ /** @beta */
347
+ uploader?: AssetSourceUploader
348
+ }
349
+
350
+ /** @public */
351
+ declare interface AssetSourceComponentProps {
352
+ action?: 'select' | 'upload'
353
+ assetSource: AssetSource
354
+ assetType?: 'file' | 'image'
355
+ accept: string
356
+ selectionType: 'single'
357
+ dialogHeaderTitle?: React.ReactNode
358
+ selectedAssets: Asset[]
359
+ onClose: () => void
360
+ onSelect: (assetFromSource: AssetFromSource[]) => void
361
+ }
362
+
363
+ /** @public */
364
+ declare interface AssetSourceSpec {
365
+ id: string
366
+ name: string
367
+ url?: string
368
+ }
369
+
370
+ /** @beta */
371
+ declare interface AssetSourceUploader {
372
+ upload(
373
+ files: globalThis.File[],
374
+ options?: {
375
+ /**
376
+ * The schema type of the field the asset is being uploaded to.
377
+ * May be of interest to the uploader to read file and image options.
378
+ */
379
+ schemaType?: SchemaType
380
+ /**
381
+ * The uploader may send patches directly to the field
382
+ * Typed 'unknown' as we don't have patch definitions in sanity/types yet.
383
+ */
384
+ onChange?: (patch: unknown) => void
385
+ },
386
+ ): AssetSourceUploadFile[]
387
+ /**
388
+ * Abort the upload of a file
389
+ */
390
+ abort(file?: AssetSourceUploadFile): void
391
+ /**
392
+ * Get the files that are currently being uploaded
393
+ */
394
+ getFiles(): AssetSourceUploadFile[]
395
+ /**
396
+ * Subscribe to upload events from the uploader
397
+ */
398
+ subscribe(subscriber: (event: AssetSourceUploadEvent) => void): () => void
399
+ /**
400
+ * Update the status of a file. Will be emitted to subscribers.
401
+ */
402
+ updateFile(
403
+ fileId: string,
404
+ data: {
405
+ progress?: number
406
+ status?: string
407
+ error?: Error
408
+ },
409
+ ): void
410
+ /**
411
+ * Reset the uploader (clear files). Should be called by the uploader when all files are done.
412
+ */
413
+ reset(): void
414
+ }
415
+
416
+ /** @beta */
417
+ declare type AssetSourceUploadEvent =
418
+ | AssetSourceUploadEventProgress
419
+ | AssetSourceUploadEventStatus
420
+ | AssetSourceUploadEventAllComplete
421
+ | AssetSourceUploadEventError
422
+ | AssetSourceUploadEventAbort
423
+
424
+ /**
425
+ * Emitted when all files are done, either successfully, aborted or with errors
426
+ * @beta */
427
+ declare type AssetSourceUploadEventAbort = {
428
+ type: 'abort'
429
+ /**
430
+ * Files aborted
431
+ */
432
+ files: AssetSourceUploadFile[]
433
+ }
434
+
435
+ /**
436
+ * Emitted when all files are done, either successfully, aborted or with errors
437
+ * @beta */
438
+ declare type AssetSourceUploadEventAllComplete = {
439
+ type: 'all-complete'
440
+ files: AssetSourceUploadFile[]
441
+ }
442
+
443
+ /**
444
+ * Emitted when all files are done, either successfully, aborted or with errors
445
+ * @beta */
446
+ declare type AssetSourceUploadEventError = {
447
+ type: 'error'
448
+ /**
449
+ * Files errored
450
+ */
451
+ files: AssetSourceUploadFile[]
452
+ }
453
+
454
+ /**
455
+ * Emitted when a file upload is progressing
456
+ * @beta */
457
+ declare type AssetSourceUploadEventProgress = {
458
+ type: 'progress'
459
+ file: AssetSourceUploadFile
460
+ progress: number
461
+ }
462
+
463
+ /**
464
+ * Emitted when a file upload is changing status
465
+ * @beta */
466
+ declare type AssetSourceUploadEventStatus = {
467
+ type: 'status'
468
+ file: AssetSourceUploadFile
469
+ status: AssetSourceUploadFile['status']
470
+ }
471
+
472
+ /** @beta */
473
+ declare interface AssetSourceUploadFile {
474
+ id: string
475
+ file: globalThis.File
476
+ progress: number
477
+ status: 'pending' | 'uploading' | 'complete' | 'error' | 'aborted'
478
+ error?: Error
479
+ result?: unknown
480
+ }
481
+
219
482
  /**
220
483
  * @public
221
484
  */
@@ -224,6 +487,60 @@ declare type BaseDefinition = {
224
487
  title?: string
225
488
  }
226
489
 
490
+ /** @public */
491
+ declare interface BaseSchemaDefinition {
492
+ name: string
493
+ title?: string
494
+ description?: string | React.JSX.Element
495
+ hidden?: ConditionalProperty
496
+ readOnly?: ConditionalProperty
497
+ icon?: ComponentType | ReactNode
498
+ validation?: unknown
499
+ initialValue?: unknown
500
+ deprecated?: DeprecatedProperty
501
+ }
502
+
503
+ /** @public */
504
+ declare interface BaseSchemaType extends Partial<DeprecationConfiguration> {
505
+ name: string
506
+ title?: string
507
+ description?: string
508
+ type?: SchemaType
509
+ liveEdit?: boolean
510
+ readOnly?: ConditionalProperty
511
+ hidden?: ConditionalProperty
512
+ icon?: ComponentType
513
+ initialValue?: InitialValueProperty<any, any>
514
+ validation?: SchemaValidationValue
515
+ preview?: PreviewConfig
516
+ /** @beta */
517
+ components?: {
518
+ block?: ComponentType<any>
519
+ inlineBlock?: ComponentType<any>
520
+ annotation?: ComponentType<any>
521
+ diff?: ComponentType<any>
522
+ field?: ComponentType<any>
523
+ input?: ComponentType<any>
524
+ item?: ComponentType<any>
525
+ preview?: ComponentType<any>
526
+ }
527
+ /**
528
+ * @deprecated This will be removed.
529
+ */
530
+ placeholder?: string
531
+ }
532
+
533
+ /**
534
+ * `BaseOptions` applies to all type options.
535
+ *
536
+ * It can be extended by interface declaration merging in plugins to provide generic options to all types and fields.
537
+ *
538
+ * @public
539
+ * */
540
+ declare interface BaseSchemaTypeOptions {
541
+ sanityCreate?: SanityCreateOptions
542
+ }
543
+
227
544
  /**
228
545
  * @beta
229
546
  */
@@ -316,6 +633,142 @@ export declare function BehaviorPlugin(props: {
316
633
  behaviors: Array<Behavior>
317
634
  }): null
318
635
 
636
+ /**
637
+ * Schema definition for text block decorators.
638
+ *
639
+ * @public
640
+ * @example The default set of decorators
641
+ * ```ts
642
+ * {
643
+ * name: 'blockContent',
644
+ * title: 'Content',
645
+ * type: 'array',
646
+ * of: [
647
+ * {
648
+ * type: 'block',
649
+ * marks: {
650
+ * decorators: [
651
+ * {title: 'Strong', value: 'strong'},
652
+ * {title: 'Emphasis', value: 'em'},
653
+ * {title: 'Underline', value: 'underline'},
654
+ * {title: 'Strike', value: 'strike'},
655
+ * {title: 'Code', value: 'code'},
656
+ * ]
657
+ * }
658
+ * }
659
+ * ]
660
+ * }
661
+ * ```
662
+ */
663
+ declare interface BlockDecoratorDefinition {
664
+ title: string
665
+ i18nTitleKey?: string
666
+ value: string
667
+ icon?: ReactNode | ComponentType
668
+ }
669
+
670
+ /**
671
+ * Schema definition for text blocks.
672
+ *
673
+ * @public
674
+ * @example the default block definition
675
+ * ```ts
676
+ * {
677
+ * name: 'blockContent',
678
+ * title: 'Content',
679
+ * type: 'array',
680
+ * of: [
681
+ * {
682
+ * type: 'block',
683
+ * marks: {
684
+ * decorators: [
685
+ * {title: 'Strong', value: 'strong'},
686
+ * {title: 'Emphasis', value: 'em'},
687
+ * {title: 'Underline', value: 'underline'},
688
+ * {title: 'Strike', value: 'strike'},
689
+ * {title: 'Code', value: 'code'},
690
+ * ],
691
+ * annotations: [
692
+ * {
693
+ * type: 'object',
694
+ * name: 'link',
695
+ * fields: [
696
+ * {
697
+ * type: 'string',
698
+ * name: 'href',
699
+ * },
700
+ * ],
701
+ * },
702
+ * ]
703
+ * },
704
+ * styles: [
705
+ * {title: 'Normal', value: 'normal'},
706
+ * {title: 'H1', value: 'h1'},
707
+ * {title: 'H2', value: 'h2'},
708
+ * {title: 'H3', value: 'h3'},
709
+ * {title: 'H4', value: 'h4'},
710
+ * {title: 'H5', value: 'h5'},
711
+ * {title: 'H6', value: 'h6'},
712
+ * {title: 'Quote', value: 'blockquote'}
713
+ * ],
714
+ * lists: [
715
+ * {title: 'Bullet', value: 'bullet'},
716
+ * {title: 'Number', value: 'number'},
717
+ * ],
718
+ * },
719
+ * ]
720
+ * }
721
+ * ```
722
+ */
723
+ declare interface BlockDefinition extends BaseSchemaDefinition {
724
+ type: 'block'
725
+ styles?: BlockStyleDefinition[]
726
+ lists?: BlockListDefinition[]
727
+ marks?: BlockMarksDefinition
728
+ of?: ArrayOfType<'object' | 'reference'>[]
729
+ initialValue?: InitialValueProperty<any, any[]>
730
+ options?: BlockOptions
731
+ validation?: ValidationBuilder<BlockRule, any[]>
732
+ }
733
+
734
+ /**
735
+ * Schema definition for a text block list style.
736
+ *
737
+ * @public
738
+ * @example The defaults lists
739
+ * ```ts
740
+ * {
741
+ * name: 'blockContent',
742
+ * title: 'Content',
743
+ * type: 'array',
744
+ * of: [
745
+ * {
746
+ * type: 'block',
747
+ * lists: [
748
+ * {title: 'Bullet', value: 'bullet'},
749
+ * {title: 'Number', value: 'number'},
750
+ * ]
751
+ * }
752
+ * ]
753
+ * }
754
+ * ```
755
+ */
756
+ declare interface BlockListDefinition {
757
+ title: string
758
+ i18nTitleKey?: string
759
+ value: string
760
+ icon?: ReactNode | ComponentType
761
+ }
762
+
763
+ /**
764
+ * Schema definition for text block marks (decorators and annotations).
765
+ *
766
+ * @public */
767
+ declare interface BlockMarksDefinition {
768
+ decorators?: BlockDecoratorDefinition[]
769
+ annotations?: ArrayOfType<'object' | 'reference'>[]
770
+ }
771
+
319
772
  /**
320
773
  * @beta
321
774
  */
@@ -324,10 +777,108 @@ declare type BlockOffset = {
324
777
  offset: number
325
778
  }
326
779
 
780
+ /**
781
+ * Schema options for a Block schema definition
782
+ * @public */
783
+ declare interface BlockOptions extends BaseSchemaTypeOptions {
784
+ /**
785
+ * Turn on or off the builtin browser spellchecking. Default is on.
786
+ */
787
+ spellCheck?: boolean
788
+ unstable_whitespaceOnPasteMode?: 'preserve' | 'normalize' | 'remove'
789
+ }
790
+
791
+ /** @public */
792
+ declare interface BlockRule extends RuleDef<BlockRule, any[]> {}
793
+
794
+ /**
795
+ * Schema definition for a text block style.
796
+ * A text block may have a block style like 'header', 'normal', 'lead'
797
+ * attached to it, which is stored on the `.style` property for that block.
798
+ *
799
+ * @public
800
+ * @remarks The first defined style will become the default style.´´
801
+ * @example The default set of styles
802
+ * ```ts
803
+ * {
804
+ * name: 'blockContent',
805
+ * title: 'Content',
806
+ * type: 'array',
807
+ * of: [
808
+ * {
809
+ * type: 'block',
810
+ * styles: [
811
+ * {title: 'Normal', value: 'normal'},
812
+ * {title: 'H1', value: 'h1'},
813
+ * {title: 'H2', value: 'h2'},
814
+ * {title: 'H3', value: 'h3'},
815
+ * {title: 'H4', value: 'h4'},
816
+ * {title: 'H5', value: 'h5'},
817
+ * {title: 'H6', value: 'h6'},
818
+ * {title: 'Quote', value: 'blockquote'}
819
+ * ]
820
+ * }
821
+ * ]
822
+ * }
823
+ * ```
824
+ * @example Example of defining a block type with custom styles and render components.
825
+ * ```ts
826
+ * defineArrayMember({
827
+ * type: 'block',
828
+ * styles: [
829
+ * {
830
+ * title: 'Paragraph',
831
+ * value: 'paragraph',
832
+ * component: ParagraphStyle,
833
+ * },
834
+ * {
835
+ * title: 'Lead',
836
+ * value: 'lead',
837
+ * component: LeadStyle,
838
+ * },
839
+ * {
840
+ * title: 'Heading',
841
+ * value: 'heading',
842
+ * component: HeadingStyle,
843
+ * },
844
+ * ],
845
+ * })
846
+ * ```
847
+ */
848
+ declare interface BlockStyleDefinition {
849
+ title: string
850
+ value: string
851
+ i18nTitleKey?: string
852
+ icon?: ReactNode | ComponentType
853
+ }
854
+
327
855
  declare type BlockWithOptionalKey =
328
856
  | TextBlockWithOptionalKey
329
857
  | ObjectBlockWithOptionalKey
330
858
 
859
+ /** @public */
860
+ declare interface BooleanDefinition extends BaseSchemaDefinition {
861
+ type: 'boolean'
862
+ options?: BooleanOptions
863
+ initialValue?: InitialValueProperty<any, boolean>
864
+ validation?: ValidationBuilder<BooleanRule, boolean>
865
+ }
866
+
867
+ /** @public */
868
+ declare interface BooleanOptions extends BaseSchemaTypeOptions {
869
+ layout?: 'switch' | 'checkbox'
870
+ }
871
+
872
+ /** @public */
873
+ declare interface BooleanRule extends RuleDef<BooleanRule, boolean> {}
874
+
875
+ /** @public */
876
+ declare interface BooleanSchemaType extends BaseSchemaType {
877
+ jsonType: 'boolean'
878
+ options?: BooleanOptions
879
+ initialValue?: InitialValueProperty<any, boolean>
880
+ }
881
+
331
882
  declare type ClipboardBehaviorEvent =
332
883
  | {
333
884
  type: StrictExtract<NativeBehaviorEventType, 'clipboard.copy'>
@@ -351,6 +902,35 @@ declare type ClipboardBehaviorEvent =
351
902
  position: Pick<EventPosition, 'selection'>
352
903
  }
353
904
 
905
+ /** @public */
906
+ declare interface CollapseOptions {
907
+ collapsed?: boolean
908
+ collapsible?: boolean
909
+ /**
910
+ * @deprecated Use `collapsible` instead
911
+ */
912
+ collapsable?: boolean
913
+ }
914
+
915
+ /** @public */
916
+ declare type ConditionalProperty =
917
+ | boolean
918
+ | ConditionalPropertyCallback
919
+ | undefined
920
+
921
+ /** @public */
922
+ declare type ConditionalPropertyCallback = (
923
+ context: ConditionalPropertyCallbackContext,
924
+ ) => boolean
925
+
926
+ /** @public */
927
+ declare interface ConditionalPropertyCallbackContext {
928
+ document: SanityDocument | undefined
929
+ parent: any
930
+ value: any
931
+ currentUser: Omit<CurrentUser, 'role'> | null
932
+ }
933
+
354
934
  declare type Converter<TMIMEType extends MIMEType = MIMEType> = {
355
935
  mimeType: TMIMEType
356
936
  serialize: Serializer<TMIMEType>
@@ -394,6 +974,46 @@ declare type ConverterEvent<TMIMEType extends MIMEType = MIMEType> =
394
974
  */
395
975
  export declare function CoreBehaviorsPlugin(): JSX.Element
396
976
 
977
+ /** @public */
978
+ declare interface CrossDatasetReferenceDefinition extends BaseSchemaDefinition {
979
+ type: 'crossDatasetReference'
980
+ weak?: boolean
981
+ to: {
982
+ type: string
983
+ title?: string
984
+ icon?: ComponentType
985
+ preview?: PreviewConfig
986
+ /**
987
+ * @deprecated Unused. Configuring search is no longer supported.
988
+ */
989
+ __experimental_search?: {
990
+ path: string | string[]
991
+ weight?: number
992
+ mapWith?: string
993
+ }[]
994
+ }[]
995
+ dataset: string
996
+ studioUrl?: (document: {id: string; type?: string}) => string | null
997
+ tokenId?: string
998
+ options?: ReferenceOptions
999
+ /**
1000
+ * @deprecated Cross-project references are no longer supported, only cross-dataset
1001
+ */
1002
+ projectId?: string
1003
+ }
1004
+
1005
+ /** @public */
1006
+ declare interface CurrentUser {
1007
+ id: string
1008
+ name: string
1009
+ email: string
1010
+ profileImage?: string
1011
+ provider?: string
1012
+ /** @deprecated use `roles` instead */
1013
+ role: string
1014
+ roles: Role[]
1015
+ }
1016
+
397
1017
  /**
398
1018
  * @beta
399
1019
  */
@@ -418,6 +1038,77 @@ declare type CustomBehaviorEventType<
418
1038
  TType extends string = '',
419
1039
  > = TType extends '' ? `${TNamespace}` : `${TNamespace}.${TType}`
420
1040
 
1041
+ /** @public */
1042
+ declare interface CustomValidator<T = unknown> {
1043
+ (
1044
+ value: T,
1045
+ context: ValidationContext,
1046
+ ): CustomValidatorResult | Promise<CustomValidatorResult>
1047
+ bypassConcurrencyLimit?: boolean
1048
+ }
1049
+
1050
+ /** @public */
1051
+ declare type CustomValidatorResult =
1052
+ | true
1053
+ | string
1054
+ | ValidationError
1055
+ | ValidationError[]
1056
+ | LocalizedValidationMessages
1057
+
1058
+ /** @public */
1059
+ declare interface DateDefinition extends BaseSchemaDefinition {
1060
+ type: 'date'
1061
+ options?: DateOptions
1062
+ placeholder?: string
1063
+ validation?: ValidationBuilder<DateRule, string>
1064
+ initialValue?: InitialValueProperty<any, string>
1065
+ }
1066
+
1067
+ /** @public */
1068
+ declare interface DateOptions extends BaseSchemaTypeOptions {
1069
+ dateFormat?: string
1070
+ }
1071
+
1072
+ /** @public */
1073
+ declare interface DateRule extends RuleDef<DateRule, string> {
1074
+ /**
1075
+ * @param minDate - Minimum date (inclusive). minDate should be in ISO 8601 format.
1076
+ */
1077
+ min: (minDate: string | FieldReference) => DateRule
1078
+ /**
1079
+ * @param maxDate - Maximum date (inclusive). maxDate should be in ISO 8601 format.
1080
+ */
1081
+ max: (maxDate: string | FieldReference) => DateRule
1082
+ }
1083
+
1084
+ /** @public */
1085
+ declare interface DatetimeDefinition extends BaseSchemaDefinition {
1086
+ type: 'datetime'
1087
+ options?: DatetimeOptions
1088
+ placeholder?: string
1089
+ validation?: ValidationBuilder<DatetimeRule, string>
1090
+ initialValue?: InitialValueProperty<any, string>
1091
+ }
1092
+
1093
+ /** @public */
1094
+ declare interface DatetimeOptions extends BaseSchemaTypeOptions {
1095
+ dateFormat?: string
1096
+ timeFormat?: string
1097
+ timeStep?: number
1098
+ }
1099
+
1100
+ /** @public */
1101
+ declare interface DatetimeRule extends RuleDef<DatetimeRule, string> {
1102
+ /**
1103
+ * @param minDate - Minimum date (inclusive). minDate should be in ISO 8601 format.
1104
+ */
1105
+ min: (minDate: string | FieldReference) => DatetimeRule
1106
+ /**
1107
+ * @param maxDate - Maximum date (inclusive). maxDate should be in ISO 8601 format.
1108
+ */
1109
+ max: (maxDate: string | FieldReference) => DatetimeRule
1110
+ }
1111
+
421
1112
  /**
422
1113
  * @beta
423
1114
  * @deprecated Install the plugin from `@portabletext/plugin-character-pair-decorator`
@@ -430,6 +1121,18 @@ export declare function DecoratorShortcutPlugin(config: {
430
1121
  }
431
1122
  }): null
432
1123
 
1124
+ /** @public */
1125
+ declare interface DeprecatedProperty {
1126
+ reason: string
1127
+ }
1128
+
1129
+ /**
1130
+ * @public
1131
+ */
1132
+ declare interface DeprecationConfiguration {
1133
+ deprecated: DeprecatedProperty
1134
+ }
1135
+
433
1136
  declare type Deserializer<TMIMEType extends MIMEType> = ({
434
1137
  snapshot,
435
1138
  event,
@@ -442,13 +1145,47 @@ declare type Deserializer<TMIMEType extends MIMEType> = ({
442
1145
  'deserialization.success' | 'deserialization.failure'
443
1146
  >
444
1147
 
445
- declare type DragBehaviorEvent =
446
- | {
447
- type: StrictExtract<NativeBehaviorEventType, 'drag.dragstart'>
448
- originEvent: {
449
- dataTransfer: DataTransfer
450
- }
451
- position: Pick<EventPosition, 'selection'>
1148
+ /** @public */
1149
+ declare interface DocumentDefinition extends Omit<ObjectDefinition, 'type'> {
1150
+ type: 'document'
1151
+ liveEdit?: boolean
1152
+ /** @beta */
1153
+ orderings?: SortOrdering[]
1154
+ options?: DocumentOptions
1155
+ validation?: ValidationBuilder<DocumentRule, SanityDocument>
1156
+ initialValue?: InitialValueProperty<any, Record<string, unknown>>
1157
+ /** @deprecated Unused. Use the new field-level search config. */
1158
+ __experimental_search?: {
1159
+ path: string
1160
+ weight: number
1161
+ mapWith?: string
1162
+ }[]
1163
+ /** @alpha */
1164
+ __experimental_omnisearch_visibility?: boolean
1165
+ /**
1166
+ * Determines whether the large preview title is displayed in the document pane form
1167
+ * @alpha
1168
+ * */
1169
+ __experimental_formPreviewTitle?: boolean
1170
+ }
1171
+
1172
+ /**
1173
+ * This exists only to allow for extensions using declaration-merging.
1174
+ *
1175
+ * @public
1176
+ */
1177
+ declare interface DocumentOptions extends BaseSchemaTypeOptions {}
1178
+
1179
+ /** @public */
1180
+ declare interface DocumentRule extends RuleDef<DocumentRule, SanityDocument> {}
1181
+
1182
+ declare type DragBehaviorEvent =
1183
+ | {
1184
+ type: StrictExtract<NativeBehaviorEventType, 'drag.dragstart'>
1185
+ originEvent: {
1186
+ dataTransfer: DataTransfer
1187
+ }
1188
+ position: Pick<EventPosition, 'selection'>
452
1189
  }
453
1190
  | {
454
1191
  type: StrictExtract<NativeBehaviorEventType, 'drag.drag'>
@@ -5227,6 +5964,31 @@ declare type EditorSnapshot = {
5227
5964
  }
5228
5965
  }
5229
5966
 
5967
+ /** @public */
5968
+ declare interface EmailDefinition extends BaseSchemaDefinition {
5969
+ type: 'email'
5970
+ options?: EmailOptions
5971
+ placeholder?: string
5972
+ validation?: ValidationBuilder<EmailRule, string>
5973
+ initialValue?: InitialValueProperty<any, string>
5974
+ }
5975
+
5976
+ /** @public */
5977
+ declare interface EmailOptions extends BaseSchemaTypeOptions {}
5978
+
5979
+ /** @public */
5980
+ declare interface EmailRule extends RuleDef<EmailRule, string> {}
5981
+
5982
+ /** @public */
5983
+ declare interface EmptyProps {}
5984
+
5985
+ /** @public */
5986
+ declare interface EnumListProps<V = unknown> {
5987
+ list?: Array<TitledListValue<V> | V>
5988
+ layout?: 'radio' | 'dropdown'
5989
+ direction?: 'horizontal' | 'vertical'
5990
+ }
5991
+
5230
5992
  /**
5231
5993
  * @public
5232
5994
  * Listen for events emitted by the editor. Must be used inside `EditorProvider`. Events available include:
@@ -5360,6 +6122,194 @@ declare type ExternalEditorEvent =
5360
6122
  declare type ExtractNamespace<TType extends string> =
5361
6123
  TType extends `${infer Namespace}.${string}` ? Namespace : TType
5362
6124
 
6125
+ /**
6126
+ * The shape of a field definition. Note, it's recommended to use the
6127
+ * `defineField` function instead of using this type directly.
6128
+ *
6129
+ * Where `defineField` infers the exact field type,
6130
+ * FieldDefinition is a compromise union of all types a field can have.
6131
+ *
6132
+ * A field definition can be a reference to another registered top-level type
6133
+ * or a inline type definition.
6134
+ *
6135
+ * @public
6136
+ */
6137
+ declare type FieldDefinition<
6138
+ TType extends IntrinsicTypeName = IntrinsicTypeName,
6139
+ TAlias extends IntrinsicTypeName | undefined = undefined,
6140
+ > = (InlineFieldDefinition[TType] | TypeAliasDefinition<string, TAlias>) &
6141
+ FieldDefinitionBase
6142
+
6143
+ /** @public */
6144
+ declare interface FieldDefinitionBase {
6145
+ fieldset?: string
6146
+ group?: string | string[]
6147
+ }
6148
+
6149
+ /** @public */
6150
+ declare interface FieldGroup {
6151
+ name: string
6152
+ icon?: ComponentType
6153
+ title?: string
6154
+ description?: string
6155
+ i18n?: I18nTextRecord<'title'>
6156
+ hidden?: ConditionalProperty
6157
+ default?: boolean
6158
+ fields?: ObjectField[]
6159
+ }
6160
+
6161
+ /** @public */
6162
+ declare type FieldGroupDefinition = {
6163
+ name: string
6164
+ title?: string
6165
+ hidden?: ConditionalProperty
6166
+ icon?: ComponentType
6167
+ default?: boolean
6168
+ i18n?: I18nTextRecord<'title'>
6169
+ }
6170
+
6171
+ /**
6172
+ * Holds a reference to a different field
6173
+ * NOTE: Only use this through {@link Rule.valueOfField}
6174
+ *
6175
+ * @public
6176
+ */
6177
+ declare interface FieldReference {
6178
+ type: symbol
6179
+ path: string | string[]
6180
+ }
6181
+
6182
+ /** @public */
6183
+ declare type FieldRules = {
6184
+ [fieldKey: string]: SchemaValidationValue
6185
+ }
6186
+
6187
+ /** @public */
6188
+ declare type Fieldset = SingleFieldSet | MultiFieldSet
6189
+
6190
+ /** @public */
6191
+ declare type FieldsetDefinition = {
6192
+ name: string
6193
+ title?: string
6194
+ description?: string
6195
+ group?: string
6196
+ hidden?: ConditionalProperty
6197
+ readOnly?: ConditionalProperty
6198
+ options?: ObjectOptions
6199
+ }
6200
+
6201
+ /** @public */
6202
+ declare interface File_2 {
6203
+ [key: string]: unknown
6204
+ asset?: Reference
6205
+ }
6206
+
6207
+ /** @public */
6208
+ declare interface FileDefinition
6209
+ extends Omit<
6210
+ ObjectDefinition,
6211
+ 'type' | 'fields' | 'options' | 'groups' | 'validation'
6212
+ > {
6213
+ type: 'file'
6214
+ fields?: ObjectDefinition['fields']
6215
+ options?: FileOptions
6216
+ validation?: ValidationBuilder<FileRule, FileValue>
6217
+ initialValue?: InitialValueProperty<any, FileValue>
6218
+ }
6219
+
6220
+ /** @public */
6221
+ declare interface FileOptions extends ObjectOptions {
6222
+ storeOriginalFilename?: boolean
6223
+ accept?: string
6224
+ sources?: AssetSource[]
6225
+ }
6226
+
6227
+ /** @public */
6228
+ declare interface FileRule extends RuleDef<FileRule, FileValue> {
6229
+ /**
6230
+ * Require a file field has an asset.
6231
+ *
6232
+ * @example
6233
+ * ```ts
6234
+ * defineField({
6235
+ * name: 'file',
6236
+ * title: 'File',
6237
+ * type: 'file',
6238
+ * validation: (Rule) => Rule.required().assetRequired(),
6239
+ * })
6240
+ * ```
6241
+ */
6242
+ assetRequired(): FileRule
6243
+ }
6244
+
6245
+ /** @public */
6246
+ declare interface FileSchemaType extends Omit<ObjectSchemaType, 'options'> {
6247
+ options?: FileOptions
6248
+ }
6249
+
6250
+ /** @public */
6251
+ declare interface FileValue {
6252
+ asset?: Reference
6253
+ [index: string]: unknown
6254
+ }
6255
+
6256
+ /** @public */
6257
+ declare interface GeopointDefinition extends BaseSchemaDefinition {
6258
+ type: 'geopoint'
6259
+ options?: GeopointOptions
6260
+ validation?: ValidationBuilder<GeopointRule, GeopointValue>
6261
+ initialValue?: InitialValueProperty<any, Omit<GeopointValue, '_type'>>
6262
+ }
6263
+
6264
+ /** @public */
6265
+ declare interface GeopointOptions extends BaseSchemaTypeOptions {}
6266
+
6267
+ /** @public */
6268
+ declare interface GeopointRule extends RuleDef<GeopointRule, GeopointValue> {}
6269
+
6270
+ /**
6271
+ * Geographical point representing a pair of latitude and longitude coordinates,
6272
+ * stored as degrees, in the World Geodetic System 1984 (WGS 84) format. Also
6273
+ * includes an optional `alt` property representing the altitude in meters.
6274
+ *
6275
+ * @public
6276
+ */
6277
+ declare interface GeopointValue {
6278
+ /**
6279
+ * Type of the object. Must be `geopoint`.
6280
+ */
6281
+ _type: 'geopoint'
6282
+ /**
6283
+ * Latitude in degrees
6284
+ */
6285
+ lat: number
6286
+ /**
6287
+ * Longitude in degrees
6288
+ */
6289
+ lng: number
6290
+ /**
6291
+ * Altitude in meters
6292
+ */
6293
+ alt?: number
6294
+ }
6295
+
6296
+ /** @public */
6297
+ declare interface GlobalDocumentReferenceDefinition
6298
+ extends BaseSchemaDefinition {
6299
+ type: 'globalDocumentReference'
6300
+ weak?: boolean
6301
+ to: {
6302
+ type: string
6303
+ title?: string
6304
+ icon?: ComponentType
6305
+ preview?: PreviewConfig
6306
+ }[]
6307
+ resourceType: string
6308
+ resourceId: string
6309
+ options?: ReferenceOptions
6310
+ studioUrl?: (document: {id: string; type?: string}) => string | null
6311
+ }
6312
+
5363
6313
  declare type HasTag = ReturnType<EditorActor['getSnapshot']>['hasTag']
5364
6314
 
5365
6315
  declare interface History_2 {
@@ -5372,6 +6322,178 @@ declare type HistoryItem = {
5372
6322
  timestamp: Date
5373
6323
  }
5374
6324
 
6325
+ /** @public */
6326
+ declare interface HotspotOptions {
6327
+ previews?: HotspotPreview[]
6328
+ }
6329
+
6330
+ /** @public */
6331
+ declare interface HotspotPreview {
6332
+ title: string
6333
+ aspectRatio: number
6334
+ }
6335
+
6336
+ /** @public */
6337
+ declare type I18nTextRecord<K extends string> = {
6338
+ [P in K]?: {
6339
+ key: string
6340
+ ns: string
6341
+ }
6342
+ }
6343
+
6344
+ /** @public */
6345
+ declare interface ImageAsset extends Asset {
6346
+ _type: 'sanity.imageAsset'
6347
+ metadata: ImageMetadata
6348
+ }
6349
+
6350
+ /** @public */
6351
+ declare interface ImageCrop {
6352
+ _type?: 'sanity.imageCrop'
6353
+ left: number
6354
+ bottom: number
6355
+ right: number
6356
+ top: number
6357
+ }
6358
+
6359
+ /** @public */
6360
+ declare interface ImageDefinition
6361
+ extends Omit<
6362
+ ObjectDefinition,
6363
+ 'type' | 'fields' | 'options' | 'groups' | 'validation'
6364
+ > {
6365
+ type: 'image'
6366
+ fields?: FieldDefinition[]
6367
+ options?: ImageOptions
6368
+ validation?: ValidationBuilder<ImageRule, ImageValue>
6369
+ initialValue?: InitialValueProperty<any, ImageValue>
6370
+ }
6371
+
6372
+ /** @public */
6373
+ declare interface ImageDimensions {
6374
+ _type: 'sanity.imageDimensions'
6375
+ height: number
6376
+ width: number
6377
+ aspectRatio: number
6378
+ }
6379
+
6380
+ /** @public */
6381
+ declare interface ImageHotspot {
6382
+ _type?: 'sanity.imageHotspot'
6383
+ width: number
6384
+ height: number
6385
+ x: number
6386
+ y: number
6387
+ }
6388
+
6389
+ /** @public */
6390
+ declare interface ImageMetadata {
6391
+ [key: string]: unknown
6392
+ _type: 'sanity.imageMetadata'
6393
+ dimensions: ImageDimensions
6394
+ palette?: ImagePalette
6395
+ lqip?: string
6396
+ blurHash?: string
6397
+ hasAlpha: boolean
6398
+ isOpaque: boolean
6399
+ }
6400
+
6401
+ /** @public */
6402
+ declare type ImageMetadataType =
6403
+ | 'blurhash'
6404
+ | 'lqip'
6405
+ | 'palette'
6406
+ | 'exif'
6407
+ | 'image'
6408
+ | 'location'
6409
+
6410
+ /** @public */
6411
+ declare interface ImageOptions extends FileOptions {
6412
+ metadata?: ImageMetadataType[]
6413
+ hotspot?: boolean | HotspotOptions
6414
+ }
6415
+
6416
+ /** @public */
6417
+ declare interface ImagePalette {
6418
+ _type: 'sanity.imagePalette'
6419
+ darkMuted?: ImageSwatch
6420
+ darkVibrant?: ImageSwatch
6421
+ dominant?: ImageSwatch
6422
+ lightMuted?: ImageSwatch
6423
+ lightVibrant?: ImageSwatch
6424
+ muted?: ImageSwatch
6425
+ vibrant?: ImageSwatch
6426
+ }
6427
+
6428
+ /** @public */
6429
+ declare interface ImageRule extends RuleDef<ImageRule, ImageValue> {
6430
+ /**
6431
+ * Require an image field has an asset.
6432
+ *
6433
+ * @example
6434
+ * ```ts
6435
+ * defineField({
6436
+ * name: 'image',
6437
+ * title: 'Image',
6438
+ * type: 'image',
6439
+ * validation: (Rule) => Rule.required().assetRequired(),
6440
+ * })
6441
+ * ```
6442
+ */
6443
+ assetRequired(): ImageRule
6444
+ }
6445
+
6446
+ /** @public */
6447
+ declare interface ImageSwatch {
6448
+ _type: 'sanity.imagePaletteSwatch'
6449
+ background: string
6450
+ foreground: string
6451
+ population: number
6452
+ title?: string
6453
+ }
6454
+
6455
+ /** @public */
6456
+ declare interface ImageValue extends FileValue {
6457
+ crop?: ImageCrop
6458
+ hotspot?: ImageHotspot
6459
+ [index: string]: unknown
6460
+ }
6461
+
6462
+ /** @public */
6463
+ declare type IndexTuple = [number | '', number | '']
6464
+
6465
+ /** @public */
6466
+ declare type InitialValueProperty<Params, Value> =
6467
+ | Value
6468
+ | InitialValueResolver<Params, Value>
6469
+ | undefined
6470
+
6471
+ /** @public */
6472
+ declare type InitialValueResolver<Params, Value> = (
6473
+ params: Params | undefined,
6474
+ context: InitialValueResolverContext,
6475
+ ) => Promise<Value> | Value
6476
+
6477
+ /** @public */
6478
+ declare interface InitialValueResolverContext {
6479
+ projectId: string
6480
+ dataset: string
6481
+ schema: Schema
6482
+ currentUser: CurrentUser | null
6483
+ getClient: (options: {apiVersion: string}) => SanityClient
6484
+ }
6485
+
6486
+ /** @public */
6487
+ declare type InlineFieldDefinition = {
6488
+ [K in keyof IntrinsicDefinitions]: Omit<
6489
+ IntrinsicDefinitions[K],
6490
+ 'initialValue' | 'validation'
6491
+ > & {
6492
+ validation?: SchemaValidationValue
6493
+ initialValue?: InitialValueProperty<any, any>
6494
+ }
6495
+ }
6496
+
5375
6497
  /**
5376
6498
  * Used to represent native InputEvents that hold a DataTransfer object.
5377
6499
  *
@@ -5390,6 +6512,33 @@ declare type InputBehaviorEvent = {
5390
6512
  }
5391
6513
  }
5392
6514
 
6515
+ /** @alpha This API may change */
6516
+ declare interface InsertMenuOptions {
6517
+ /**
6518
+ * @defaultValue `'auto'`
6519
+ * `filter: 'auto'` automatically turns on filtering if there are more than 5
6520
+ * schema types added to the menu.
6521
+ */
6522
+ filter?: 'auto' | boolean
6523
+ groups?: Array<{
6524
+ name: string
6525
+ title?: string
6526
+ of?: Array<string>
6527
+ }>
6528
+ /** defaultValue `true` */
6529
+ showIcons?: boolean
6530
+ /** @defaultValue `[{name: 'list'}]` */
6531
+ views?: Array<
6532
+ | {
6533
+ name: 'list'
6534
+ }
6535
+ | {
6536
+ name: 'grid'
6537
+ previewImageUrl?: (schemaTypeName: string) => string | undefined
6538
+ }
6539
+ >
6540
+ }
6541
+
5393
6542
  declare type InsertPlacement = 'auto' | 'after' | 'before'
5394
6543
 
5395
6544
  declare type InternalPatchEvent = NamespaceEvent<PatchEvent, 'internal'> & {
@@ -5397,6 +6546,64 @@ declare type InternalPatchEvent = NamespaceEvent<PatchEvent, 'internal'> & {
5397
6546
  value: Array<PortableTextBlock>
5398
6547
  }
5399
6548
 
6549
+ /** @public */
6550
+ declare type IntrinsicArrayOfDefinition = {
6551
+ [K in keyof IntrinsicDefinitions]: Omit<
6552
+ ArrayOfEntry<IntrinsicDefinitions[K]>,
6553
+ 'validation' | 'initialValue'
6554
+ > & {
6555
+ validation?: SchemaValidationValue
6556
+ initialValue?: InitialValueProperty<any, any>
6557
+ }
6558
+ }
6559
+
6560
+ /**
6561
+ * `IntrinsicDefinitions` is a lookup map for "predefined" schema definitions.
6562
+ * Schema types in `IntrinsicDefinitions` will have good type-completion and type-safety in {@link defineType},
6563
+ * {@link defineField} and {@link defineArrayMember} once the `type` property is provided.
6564
+ *
6565
+ * By default, `IntrinsicDefinitions` contains all standard Sanity schema types (`array`, `string`, `number` ect),
6566
+ * but it is an interface and as such, open for extension.
6567
+ *
6568
+ * This type can be extended using declaration merging; this way new entries can be added.
6569
+ * See {@link defineType} for examples on how this can be accomplished.
6570
+ *
6571
+ * @see defineType
6572
+ *
6573
+ * @public
6574
+ */
6575
+ declare interface IntrinsicDefinitions {
6576
+ array: ArrayDefinition
6577
+ block: BlockDefinition
6578
+ boolean: BooleanDefinition
6579
+ date: DateDefinition
6580
+ datetime: DatetimeDefinition
6581
+ document: DocumentDefinition
6582
+ file: FileDefinition
6583
+ geopoint: GeopointDefinition
6584
+ image: ImageDefinition
6585
+ number: NumberDefinition
6586
+ object: ObjectDefinition
6587
+ reference: ReferenceDefinition
6588
+ crossDatasetReference: CrossDatasetReferenceDefinition
6589
+ globalDocumentReference: GlobalDocumentReferenceDefinition
6590
+ slug: SlugDefinition
6591
+ string: StringDefinition
6592
+ text: TextDefinition
6593
+ url: UrlDefinition
6594
+ email: EmailDefinition
6595
+ }
6596
+
6597
+ /**
6598
+ * A union of all intrinsic types allowed natively in the schema.
6599
+ *
6600
+ * @see IntrinsicDefinitions
6601
+ *
6602
+ * @public
6603
+ */
6604
+ declare type IntrinsicTypeName =
6605
+ IntrinsicDefinitions[keyof IntrinsicDefinitions]['type']
6606
+
5400
6607
  /**
5401
6608
  * The editor has invalid data in the value that can be resolved by the user
5402
6609
  * @beta */
@@ -5436,6 +6643,27 @@ declare type KeyboardBehaviorEvent =
5436
6643
  >
5437
6644
  }
5438
6645
 
6646
+ /** @public */
6647
+ declare type KeyedSegment = {
6648
+ _key: string
6649
+ }
6650
+
6651
+ /**
6652
+ * Holds localized validation messages for a given field.
6653
+ *
6654
+ * @example Custom message for English (US) and Norwegian (Bokmål):
6655
+ * ```
6656
+ * {
6657
+ * 'en-US': 'Needs to start with a capital letter',
6658
+ * 'no-NB': 'Må starte med stor bokstav',
6659
+ * }
6660
+ * ```
6661
+ * @public
6662
+ */
6663
+ declare interface LocalizedValidationMessages {
6664
+ [locale: string]: string
6665
+ }
6666
+
5439
6667
  /**
5440
6668
  * @beta
5441
6669
  */
@@ -5533,6 +6761,21 @@ declare type MouseBehaviorEvent = {
5533
6761
  position: EventPosition
5534
6762
  }
5535
6763
 
6764
+ /** @public */
6765
+ declare interface MultiFieldSet {
6766
+ name: string
6767
+ title?: string
6768
+ description?: string
6769
+ single?: false
6770
+ group?: string | string[]
6771
+ options?: CollapseOptions & {
6772
+ columns?: number
6773
+ }
6774
+ fields: ObjectField[]
6775
+ hidden?: ConditionalProperty
6776
+ readOnly?: ConditionalProperty
6777
+ }
6778
+
5536
6779
  /**
5537
6780
  * @public
5538
6781
  */
@@ -5600,10 +6843,114 @@ declare const nativeBehaviorEventTypes: readonly [
5600
6843
  'mouse.click',
5601
6844
  ]
5602
6845
 
6846
+ /** @public */
6847
+ declare interface NumberDefinition extends BaseSchemaDefinition {
6848
+ type: 'number'
6849
+ options?: NumberOptions
6850
+ placeholder?: string
6851
+ validation?: ValidationBuilder<NumberRule, number>
6852
+ initialValue?: InitialValueProperty<any, number>
6853
+ }
6854
+
6855
+ /** @public */
6856
+ declare interface NumberOptions
6857
+ extends EnumListProps<number>,
6858
+ BaseSchemaTypeOptions {}
6859
+
6860
+ /** @public */
6861
+ declare interface NumberRule extends RuleDef<NumberRule, number> {
6862
+ min: (minNumber: number | FieldReference) => NumberRule
6863
+ max: (maxNumber: number | FieldReference) => NumberRule
6864
+ lessThan: (limit: number | FieldReference) => NumberRule
6865
+ greaterThan: (limit: number | FieldReference) => NumberRule
6866
+ integer: () => NumberRule
6867
+ precision: (limit: number | FieldReference) => NumberRule
6868
+ positive: () => NumberRule
6869
+ negative: () => NumberRule
6870
+ }
6871
+
6872
+ /** @public */
6873
+ declare interface NumberSchemaType extends BaseSchemaType {
6874
+ jsonType: 'number'
6875
+ options?: NumberOptions
6876
+ initialValue?: InitialValueProperty<any, number>
6877
+ }
6878
+
5603
6879
  declare type ObjectBlockWithOptionalKey = Omit<PortableTextObject, '_key'> & {
5604
6880
  _key?: PortableTextObject['_key']
5605
6881
  }
5606
6882
 
6883
+ /** @public */
6884
+ declare interface ObjectDefinition extends BaseSchemaDefinition {
6885
+ type: 'object'
6886
+ /**
6887
+ * Object must have at least one field. This is validated at Studio startup.
6888
+ */
6889
+ fields: FieldDefinition[]
6890
+ groups?: FieldGroupDefinition[]
6891
+ fieldsets?: FieldsetDefinition[]
6892
+ preview?: PreviewConfig
6893
+ options?: ObjectOptions
6894
+ validation?: ValidationBuilder<ObjectRule, Record<string, unknown>>
6895
+ initialValue?: InitialValueProperty<any, Record<string, unknown>>
6896
+ }
6897
+
6898
+ /** @public */
6899
+ declare interface ObjectField<T extends SchemaType = SchemaType> {
6900
+ name: string
6901
+ fieldset?: string
6902
+ group?: string | string[]
6903
+ type: ObjectFieldType<T>
6904
+ }
6905
+
6906
+ /** @public */
6907
+ declare type ObjectFieldType<T extends SchemaType = SchemaType> = T & {
6908
+ hidden?: ConditionalProperty
6909
+ readOnly?: ConditionalProperty
6910
+ }
6911
+
6912
+ /** @public */
6913
+ declare interface ObjectOptions extends BaseSchemaTypeOptions {
6914
+ collapsible?: boolean
6915
+ collapsed?: boolean
6916
+ columns?: number
6917
+ modal?: {
6918
+ type?: 'dialog' | 'popover'
6919
+ width?: number | number[] | 'auto'
6920
+ }
6921
+ }
6922
+
6923
+ /** @public */
6924
+ declare interface ObjectRule
6925
+ extends RuleDef<ObjectRule, Record<string, unknown>> {}
6926
+
6927
+ /** @public */
6928
+ declare interface ObjectSchemaType extends BaseSchemaType {
6929
+ jsonType: 'object'
6930
+ fields: ObjectField[]
6931
+ groups?: FieldGroup[]
6932
+ fieldsets?: Fieldset[]
6933
+ initialValue?: InitialValueProperty<any, Record<string, unknown>>
6934
+ weak?: boolean
6935
+ /** @deprecated Unused. Use the new field-level search config. */
6936
+ __experimental_search?: {
6937
+ path: (string | number)[]
6938
+ weight: number
6939
+ mapWith?: string
6940
+ }[]
6941
+ /** @alpha */
6942
+ __experimental_omnisearch_visibility?: boolean
6943
+ /** @alpha */
6944
+ __experimental_actions?: string[]
6945
+ /** @alpha */
6946
+ __experimental_formPreviewTitle?: boolean
6947
+ /**
6948
+ * @beta
6949
+ */
6950
+ orderings?: SortOrdering[]
6951
+ options?: any
6952
+ }
6953
+
5607
6954
  /**
5608
6955
  * @beta
5609
6956
  * Restrict the editor to one line. The plugin takes care of blocking
@@ -5630,7 +6977,13 @@ declare type PatchEvent = {
5630
6977
  patch: Patch
5631
6978
  }
5632
6979
 
5633
- /**
6980
+ /** @public */
6981
+ declare type Path = PathSegment[]
6982
+
6983
+ /** @public */
6984
+ declare type PathSegment = string | number | KeyedSegment | IndexTuple
6985
+
6986
+ /**
5634
6987
  * @internal
5635
6988
  */
5636
6989
  declare type PickFromUnion<
@@ -5639,6 +6992,18 @@ declare type PickFromUnion<
5639
6992
  TPickedTags extends TUnion[TTagKey],
5640
6993
  > = TUnion extends Record<TTagKey, TPickedTags> ? TUnion : never
5641
6994
 
6995
+ /** @alpha */
6996
+ declare type PortableTextBlock = PortableTextTextBlock | PortableTextObject
6997
+
6998
+ /** @alpha */
6999
+ declare type PortableTextChild = PortableTextObject | PortableTextSpan
7000
+
7001
+ /** @alpha */
7002
+ declare interface PortableTextListBlock extends PortableTextTextBlock {
7003
+ listItem: string
7004
+ level: number
7005
+ }
7006
+
5642
7007
  /** @beta */
5643
7008
  declare type PortableTextMemberSchemaTypes = {
5644
7009
  annotations: (ObjectSchemaType & {
@@ -5654,6 +7019,13 @@ declare type PortableTextMemberSchemaTypes = {
5654
7019
  lists: BlockListDefinition[]
5655
7020
  }
5656
7021
 
7022
+ /** @alpha */
7023
+ declare interface PortableTextObject {
7024
+ _type: string
7025
+ _key: string
7026
+ [other: string]: unknown
7027
+ }
7028
+
5657
7029
  declare interface PortableTextSlateEditor extends ReactEditor {
5658
7030
  _key: 'editor'
5659
7031
  _type: 'editor'
@@ -5687,6 +7059,162 @@ declare interface PortableTextSlateEditor extends ReactEditor {
5687
7059
  redo: () => void
5688
7060
  }
5689
7061
 
7062
+ /** @alpha */
7063
+ declare interface PortableTextSpan {
7064
+ _key: string
7065
+ _type: 'span'
7066
+ text: string
7067
+ marks?: string[]
7068
+ }
7069
+
7070
+ /** @alpha */
7071
+ declare interface PortableTextTextBlock<
7072
+ TChild = PortableTextSpan | PortableTextObject,
7073
+ > {
7074
+ _type: string
7075
+ _key: string
7076
+ children: TChild[]
7077
+ markDefs?: PortableTextObject[]
7078
+ listItem?: string
7079
+ style?: string
7080
+ level?: number
7081
+ }
7082
+
7083
+ /** @public */
7084
+ declare interface PrepareViewOptions {
7085
+ /** @beta */
7086
+ ordering?: SortOrdering
7087
+ }
7088
+
7089
+ /** @public */
7090
+ declare interface PreviewConfig<
7091
+ Select extends Record<string, string> = Record<string, string>,
7092
+ PrepareValue extends Record<keyof Select, any> = Record<keyof Select, any>,
7093
+ > {
7094
+ select?: Select
7095
+ prepare?: (
7096
+ value: PrepareValue,
7097
+ viewOptions?: PrepareViewOptions,
7098
+ ) => PreviewValue
7099
+ }
7100
+
7101
+ /** @public */
7102
+ declare interface PreviewValue {
7103
+ _id?: string
7104
+ _createdAt?: string
7105
+ _updatedAt?: string
7106
+ title?: string
7107
+ subtitle?: string
7108
+ description?: string
7109
+ media?: ReactNode | ElementType
7110
+ imageUrl?: string
7111
+ }
7112
+
7113
+ /** @public */
7114
+ declare interface Reference {
7115
+ _type: string
7116
+ _ref: string
7117
+ _key?: string
7118
+ _weak?: boolean
7119
+ _strengthenOnPublish?: {
7120
+ type: string
7121
+ weak?: boolean
7122
+ template?: {
7123
+ id: string
7124
+ params: Record<string, string | number | boolean>
7125
+ }
7126
+ }
7127
+ }
7128
+
7129
+ /** @public */
7130
+ declare interface ReferenceBaseOptions extends BaseSchemaTypeOptions {
7131
+ disableNew?: boolean
7132
+ }
7133
+
7134
+ /** @public */
7135
+ declare interface ReferenceDefinition extends BaseSchemaDefinition {
7136
+ type: 'reference'
7137
+ to: ReferenceTo
7138
+ weak?: boolean
7139
+ options?: ReferenceOptions
7140
+ validation?: ValidationBuilder<ReferenceRule, ReferenceValue>
7141
+ initialValue?: InitialValueProperty<any, Omit<ReferenceValue, '_type'>>
7142
+ }
7143
+
7144
+ /** @public */
7145
+ declare type ReferenceFilterOptions =
7146
+ | ReferenceFilterResolverOptions
7147
+ | ReferenceFilterQueryOptions
7148
+
7149
+ /** @public */
7150
+ declare interface ReferenceFilterQueryOptions {
7151
+ filter: string
7152
+ filterParams?: Record<string, unknown>
7153
+ }
7154
+
7155
+ /** @public */
7156
+ declare type ReferenceFilterResolver = (
7157
+ context: ReferenceFilterResolverContext,
7158
+ ) => ReferenceFilterSearchOptions | Promise<ReferenceFilterSearchOptions>
7159
+
7160
+ /** @public */
7161
+ declare interface ReferenceFilterResolverContext {
7162
+ document: SanityDocument
7163
+ parent?: Record<string, unknown> | Record<string, unknown>[]
7164
+ parentPath: Path
7165
+ getClient: (options: {apiVersion: string}) => SanityClient
7166
+ }
7167
+
7168
+ /** @public */
7169
+ declare interface ReferenceFilterResolverOptions {
7170
+ filter?: ReferenceFilterResolver
7171
+ filterParams?: never
7172
+ }
7173
+
7174
+ /** @public */
7175
+ declare type ReferenceFilterSearchOptions = {
7176
+ filter?: string
7177
+ params?: Record<string, unknown>
7178
+ tag?: string
7179
+ maxFieldDepth?: number
7180
+ strategy?: SearchStrategy
7181
+ perspective?: ClientPerspective
7182
+ }
7183
+
7184
+ /**
7185
+ * Types are closed for extension. To add properties via declaration merging to this type,
7186
+ * redeclare and add the properties to the interfaces that make up ReferenceOptions type.
7187
+ *
7188
+ * @see ReferenceFilterOptions
7189
+ * @see ReferenceFilterResolverOptions
7190
+ * @see ReferenceBaseOptions
7191
+ *
7192
+ * @public
7193
+ */
7194
+ declare type ReferenceOptions = ReferenceBaseOptions & ReferenceFilterOptions
7195
+
7196
+ /** @public */
7197
+ declare interface ReferenceRule
7198
+ extends RuleDef<ReferenceRule, ReferenceValue> {}
7199
+
7200
+ /** @public */
7201
+ declare interface ReferenceSchemaType
7202
+ extends Omit<ObjectSchemaType, 'options'> {
7203
+ jsonType: 'object'
7204
+ to: ObjectSchemaType[]
7205
+ weak?: boolean
7206
+ options?: ReferenceOptions
7207
+ }
7208
+
7209
+ /** @public */
7210
+ declare type ReferenceTo =
7211
+ | SchemaTypeDefinition
7212
+ | TypeReference
7213
+ | Array<SchemaTypeDefinition | TypeReference>
7214
+
7215
+ /** @public */
7216
+ declare type ReferenceValue = Reference
7217
+
5690
7218
  /**************************************
5691
7219
  * Resolve behavior event
5692
7220
  **************************************/
@@ -5712,6 +7240,437 @@ declare type ResolveBehaviorEvent<
5712
7240
  ? PickFromUnion<BehaviorEvent, 'type', TBehaviorEventType>
5713
7241
  : never
5714
7242
 
7243
+ /** @public */
7244
+ declare interface Role {
7245
+ name: string
7246
+ title: string
7247
+ description?: string
7248
+ }
7249
+
7250
+ /** @public */
7251
+ declare interface Rule {
7252
+ /**
7253
+ * @internal
7254
+ * @deprecated internal use only
7255
+ */
7256
+ _type: RuleTypeConstraint | undefined
7257
+ /**
7258
+ * @internal
7259
+ * @deprecated internal use only
7260
+ */
7261
+ _level: 'error' | 'warning' | 'info' | undefined
7262
+ /**
7263
+ * @internal
7264
+ * @deprecated internal use only
7265
+ */
7266
+ _required: 'required' | 'optional' | undefined
7267
+ /**
7268
+ * @internal
7269
+ * @deprecated internal use only
7270
+ */
7271
+ _typeDef: SchemaType | undefined
7272
+ /**
7273
+ * @internal
7274
+ * @deprecated internal use only
7275
+ */
7276
+ _message: string | LocalizedValidationMessages | undefined
7277
+ /**
7278
+ * @internal
7279
+ * @deprecated internal use only
7280
+ */
7281
+ _rules: RuleSpec[]
7282
+ /**
7283
+ * @internal
7284
+ * @deprecated internal use only
7285
+ */
7286
+ _fieldRules: FieldRules | undefined
7287
+ /**
7288
+ * Takes in a path and returns an object with a symbol.
7289
+ *
7290
+ * When the validation lib sees this symbol, it will use the provided path to
7291
+ * get a value from the current field's parent and use that value as the input
7292
+ * to the Rule.
7293
+ *
7294
+ * The path that's given is forwarded to `lodash/get`
7295
+ *
7296
+ * ```js
7297
+ * fields: [
7298
+ * // ...
7299
+ * {
7300
+ * // ...
7301
+ * name: 'highestTemperature',
7302
+ * type: 'number',
7303
+ * validation: (Rule) => Rule.positive().min(Rule.valueOfField('lowestTemperature')),
7304
+ * // ...
7305
+ * },
7306
+ * ]
7307
+ * ```
7308
+ */
7309
+ valueOfField: (path: string | string[]) => FieldReference
7310
+ error(message?: string | LocalizedValidationMessages): Rule
7311
+ warning(message?: string | LocalizedValidationMessages): Rule
7312
+ info(message?: string | LocalizedValidationMessages): Rule
7313
+ reset(): this
7314
+ isRequired(): boolean
7315
+ clone(): Rule
7316
+ cloneWithRules(rules: RuleSpec[]): Rule
7317
+ merge(rule: Rule): Rule
7318
+ type(targetType: RuleTypeConstraint | Lowercase<RuleTypeConstraint>): Rule
7319
+ all(children: Rule[]): Rule
7320
+ either(children: Rule[]): Rule
7321
+ optional(): Rule
7322
+ required(): Rule
7323
+ custom<T = unknown>(
7324
+ fn: CustomValidator<T>,
7325
+ options?: {
7326
+ bypassConcurrencyLimit?: boolean
7327
+ },
7328
+ ): Rule
7329
+ min(len: number | string | FieldReference): Rule
7330
+ max(len: number | string | FieldReference): Rule
7331
+ length(len: number | FieldReference): Rule
7332
+ valid(value: unknown | unknown[]): Rule
7333
+ integer(): Rule
7334
+ precision(limit: number | FieldReference): Rule
7335
+ positive(): Rule
7336
+ negative(): Rule
7337
+ greaterThan(num: number | FieldReference): Rule
7338
+ lessThan(num: number | FieldReference): Rule
7339
+ uppercase(): Rule
7340
+ lowercase(): Rule
7341
+ regex(
7342
+ pattern: RegExp,
7343
+ name: string,
7344
+ options: {
7345
+ name?: string
7346
+ invert?: boolean
7347
+ },
7348
+ ): Rule
7349
+ regex(
7350
+ pattern: RegExp,
7351
+ options: {
7352
+ name?: string
7353
+ invert?: boolean
7354
+ },
7355
+ ): Rule
7356
+ regex(pattern: RegExp, name: string): Rule
7357
+ regex(pattern: RegExp): Rule
7358
+ email(): Rule
7359
+ uri(options?: UriValidationOptions): Rule
7360
+ unique(): Rule
7361
+ reference(): Rule
7362
+ fields(rules: FieldRules): Rule
7363
+ assetRequired(): Rule
7364
+ validate(
7365
+ value: unknown,
7366
+ options: ValidationContext & {
7367
+ /**
7368
+ * @deprecated Internal use only
7369
+ * @internal
7370
+ */
7371
+ __internal?: {
7372
+ customValidationConcurrencyLimiter?: {
7373
+ ready: () => Promise<void>
7374
+ release: () => void
7375
+ }
7376
+ }
7377
+ },
7378
+ ): Promise<ValidationMarker[]>
7379
+ }
7380
+
7381
+ /** @public */
7382
+ declare type RuleBuilder<
7383
+ T extends RuleDef<T, FieldValue>,
7384
+ FieldValue = unknown,
7385
+ > = T | T[]
7386
+
7387
+ /** @public */
7388
+ declare interface RuleDef<T, FieldValue = unknown> {
7389
+ required: () => T
7390
+ custom: <LenientFieldValue extends FieldValue>(
7391
+ fn: CustomValidator<LenientFieldValue | undefined>,
7392
+ ) => T
7393
+ info: (message?: string | LocalizedValidationMessages) => T
7394
+ error: (message?: string | LocalizedValidationMessages) => T
7395
+ warning: (message?: string | LocalizedValidationMessages) => T
7396
+ valueOfField: (path: string | string[]) => FieldReference
7397
+ }
7398
+
7399
+ /** @public */
7400
+ declare type RuleSpec =
7401
+ | {
7402
+ flag: 'integer'
7403
+ }
7404
+ | {
7405
+ flag: 'email'
7406
+ }
7407
+ | {
7408
+ flag: 'unique'
7409
+ }
7410
+ | {
7411
+ flag: 'reference'
7412
+ }
7413
+ | {
7414
+ flag: 'type'
7415
+ constraint: RuleTypeConstraint
7416
+ }
7417
+ | {
7418
+ flag: 'all'
7419
+ constraint: Rule[]
7420
+ }
7421
+ | {
7422
+ flag: 'either'
7423
+ constraint: Rule[]
7424
+ }
7425
+ | {
7426
+ flag: 'presence'
7427
+ constraint: 'optional' | 'required'
7428
+ }
7429
+ | {
7430
+ flag: 'custom'
7431
+ constraint: CustomValidator
7432
+ }
7433
+ | {
7434
+ flag: 'min'
7435
+ constraint: number | string
7436
+ }
7437
+ | {
7438
+ flag: 'max'
7439
+ constraint: number | string
7440
+ }
7441
+ | {
7442
+ flag: 'length'
7443
+ constraint: number
7444
+ }
7445
+ | {
7446
+ flag: 'valid'
7447
+ constraint: unknown[]
7448
+ }
7449
+ | {
7450
+ flag: 'precision'
7451
+ constraint: number
7452
+ }
7453
+ | {
7454
+ flag: 'lessThan'
7455
+ constraint: number
7456
+ }
7457
+ | {
7458
+ flag: 'greaterThan'
7459
+ constraint: number
7460
+ }
7461
+ | {
7462
+ flag: 'stringCasing'
7463
+ constraint: 'uppercase' | 'lowercase'
7464
+ }
7465
+ | {
7466
+ flag: 'assetRequired'
7467
+ constraint: {
7468
+ assetType: 'asset' | 'image' | 'file'
7469
+ }
7470
+ }
7471
+ | {
7472
+ flag: 'regex'
7473
+ constraint: {
7474
+ pattern: RegExp
7475
+ name?: string
7476
+ invert: boolean
7477
+ }
7478
+ }
7479
+ | {
7480
+ flag: 'uri'
7481
+ constraint: {
7482
+ options: {
7483
+ scheme: RegExp[]
7484
+ allowRelative: boolean
7485
+ relativeOnly: boolean
7486
+ allowCredentials: boolean
7487
+ }
7488
+ }
7489
+ }
7490
+
7491
+ /** @public */
7492
+ declare type RuleTypeConstraint =
7493
+ | 'Array'
7494
+ | 'Boolean'
7495
+ | 'Date'
7496
+ | 'Number'
7497
+ | 'Object'
7498
+ | 'String'
7499
+
7500
+ /**
7501
+ * Options for configuring how Sanity Create interfaces with the type or field.
7502
+ *
7503
+ * @public
7504
+ */
7505
+ declare interface SanityCreateOptions {
7506
+ /** Set to true to exclude a type or field from appearing in Sanity Create */
7507
+ exclude?: boolean
7508
+ /**
7509
+ * A short description of what the type or field is used for.
7510
+ * Purpose can be used to improve how and when content mapping uses the field.
7511
+ * */
7512
+ purpose?: string
7513
+ }
7514
+
7515
+ /** @public */
7516
+ declare interface SanityDocument {
7517
+ _id: string
7518
+ _type: string
7519
+ _createdAt: string
7520
+ _updatedAt: string
7521
+ _rev: string
7522
+ [key: string]: unknown
7523
+ }
7524
+
7525
+ /** @public */
7526
+ declare interface Schema {
7527
+ /** @internal */
7528
+ _original?: {
7529
+ name: string
7530
+ types: SchemaTypeDefinition[]
7531
+ }
7532
+ /** @internal */
7533
+ _registry: {
7534
+ [typeName: string]: any
7535
+ }
7536
+ /** @internal */
7537
+ _validation?: SchemaValidationProblemGroup[]
7538
+ name: string
7539
+ get: (name: string) => SchemaType | undefined
7540
+ has: (name: string) => boolean
7541
+ getTypeNames: () => string[]
7542
+ }
7543
+
7544
+ /**
7545
+ * Note: you probably want `SchemaTypeDefinition` instead
7546
+ * @see SchemaTypeDefinition
7547
+ *
7548
+ * @public
7549
+ */
7550
+ declare type SchemaType =
7551
+ | ArraySchemaType
7552
+ | BooleanSchemaType
7553
+ | FileSchemaType
7554
+ | NumberSchemaType
7555
+ | ObjectSchemaType
7556
+ | StringSchemaType
7557
+ | ReferenceSchemaType
7558
+
7559
+ /**
7560
+ * Represents a Sanity schema type definition with an optional type parameter.
7561
+ *
7562
+ * It's recommend to use the `defineType` helper instead of this type by
7563
+ * itself.
7564
+ *
7565
+ * @see defineType
7566
+ *
7567
+ * @public
7568
+ */
7569
+ declare type SchemaTypeDefinition<
7570
+ TType extends IntrinsicTypeName = IntrinsicTypeName,
7571
+ > = IntrinsicDefinitions[IntrinsicTypeName] | TypeAliasDefinition<string, TType>
7572
+
7573
+ /** @public */
7574
+ declare interface SchemaValidationError {
7575
+ helpId?: string
7576
+ message: string
7577
+ severity: 'error'
7578
+ }
7579
+
7580
+ /** @internal */
7581
+ declare type SchemaValidationProblem =
7582
+ | SchemaValidationError
7583
+ | SchemaValidationWarning
7584
+
7585
+ /** @internal */
7586
+ declare interface SchemaValidationProblemGroup {
7587
+ path: SchemaValidationProblemPath
7588
+ problems: SchemaValidationProblem[]
7589
+ }
7590
+
7591
+ /** @internal */
7592
+ declare type SchemaValidationProblemPath = Array<
7593
+ | {
7594
+ kind: 'type'
7595
+ type: string
7596
+ name?: string
7597
+ }
7598
+ | {
7599
+ kind: 'property'
7600
+ name: string
7601
+ }
7602
+ >
7603
+
7604
+ /**
7605
+ * Represents the possible values of a schema type's `validation` field.
7606
+ *
7607
+ * If the schema has not been run through `inferFromSchema` from
7608
+ * `sanity/validation` then value could be a function.
7609
+ *
7610
+ * `inferFromSchema` mutates the schema converts this value to an array of
7611
+ * `Rule` instances.
7612
+ *
7613
+ * @privateRemarks
7614
+ *
7615
+ * Usage of the schema inside the studio will almost always be from the compiled
7616
+ * `createSchema` function. In this case, you can cast the value or throw to
7617
+ * narrow the type. E.g.:
7618
+ *
7619
+ * ```ts
7620
+ * if (typeof type.validation === 'function') {
7621
+ * throw new Error(
7622
+ * `Schema type "${type.name}"'s \`validation\` was not run though \`inferFromSchema\``
7623
+ * )
7624
+ * }
7625
+ * ```
7626
+ *
7627
+ * @public
7628
+ */
7629
+ declare type SchemaValidationValue =
7630
+ | false
7631
+ | undefined
7632
+ | Rule
7633
+ | SchemaValidationValue[]
7634
+ | ((rule: Rule) => SchemaValidationValue)
7635
+
7636
+ /** @internal */
7637
+ declare interface SchemaValidationWarning {
7638
+ helpId?: string
7639
+ message: string
7640
+ severity: 'warning'
7641
+ }
7642
+
7643
+ /** @public */
7644
+ declare interface SearchConfiguration {
7645
+ search?: {
7646
+ /**
7647
+ * Defines a search weight for this field to prioritize its importance
7648
+ * during search operations in the Studio. This setting allows the specified
7649
+ * field to be ranked higher in search results compared to other fields.
7650
+ *
7651
+ * By default, all fields are assigned a weight of 1. However, if a field is
7652
+ * chosen as the `title` in the preview configuration's `select` option, it
7653
+ * will automatically receive a default weight of 10. Similarly, if selected
7654
+ * as the `subtitle`, the default weight is 5. Fields marked as
7655
+ * `hidden: true` (no function) are assigned a weight of 0 by default.
7656
+ *
7657
+ * Note: Search weight configuration is currently supported only for fields
7658
+ * of type string or portable text arrays.
7659
+ */
7660
+ weight?: number
7661
+ }
7662
+ }
7663
+
7664
+ /**
7665
+ * @public
7666
+ */
7667
+ declare const searchStrategies: readonly ['groqLegacy', 'groq2024']
7668
+
7669
+ /**
7670
+ * @public
7671
+ */
7672
+ declare type SearchStrategy = (typeof searchStrategies)[number]
7673
+
5715
7674
  declare type Serializer<TMIMEType extends MIMEType> = ({
5716
7675
  snapshot,
5717
7676
  event,
@@ -5724,8 +7683,159 @@ declare type Serializer<TMIMEType extends MIMEType> = ({
5724
7683
  'serialization.success' | 'serialization.failure'
5725
7684
  >
5726
7685
 
7686
+ /** @public */
7687
+ declare interface SingleFieldSet {
7688
+ single: true
7689
+ field: ObjectField
7690
+ hidden?: ConditionalProperty
7691
+ readOnly?: ConditionalProperty
7692
+ group?: string | string[]
7693
+ }
7694
+
7695
+ /** @public */
7696
+ declare interface SlugDefinition extends BaseSchemaDefinition {
7697
+ type: 'slug'
7698
+ options?: SlugOptions
7699
+ validation?: ValidationBuilder<SlugRule, SlugValue>
7700
+ initialValue?: InitialValueProperty<any, Omit<SlugValue, '_type'>>
7701
+ }
7702
+
7703
+ /** @public */
7704
+ declare type SlugifierFn = (
7705
+ source: string,
7706
+ schemaType: SlugSchemaType,
7707
+ context: SlugSourceContext,
7708
+ ) => string | Promise<string>
7709
+
7710
+ /** @public */
7711
+ declare type SlugIsUniqueValidator = (
7712
+ slug: string,
7713
+ context: SlugValidationContext,
7714
+ ) => boolean | Promise<boolean>
7715
+
7716
+ /** @public */
7717
+ declare interface SlugOptions
7718
+ extends SearchConfiguration,
7719
+ BaseSchemaTypeOptions {
7720
+ source?: string | Path | SlugSourceFn
7721
+ maxLength?: number
7722
+ slugify?: SlugifierFn
7723
+ isUnique?: SlugIsUniqueValidator
7724
+ disableArrayWarning?: boolean
7725
+ }
7726
+
7727
+ /** @public */
7728
+ declare type SlugParent = Record<string, unknown> | Record<string, unknown>[]
7729
+
7730
+ /** @public */
7731
+ declare interface SlugRule extends RuleDef<SlugRule, SlugValue> {}
7732
+
7733
+ /** @public */
7734
+ declare interface SlugSchemaType extends ObjectSchemaType {
7735
+ jsonType: 'object'
7736
+ options?: SlugOptions
7737
+ }
7738
+
7739
+ /** @public */
7740
+ declare interface SlugSourceContext {
7741
+ parentPath: Path
7742
+ parent: SlugParent
7743
+ projectId: string
7744
+ dataset: string
7745
+ schema: Schema
7746
+ currentUser: CurrentUser | null
7747
+ getClient: (options: {apiVersion: string}) => SanityClient
7748
+ }
7749
+
7750
+ /** @public */
7751
+ declare type SlugSourceFn = (
7752
+ document: SanityDocument,
7753
+ context: SlugSourceContext,
7754
+ ) => string | Promise<string>
7755
+
7756
+ /** @public */
7757
+ declare interface SlugValidationContext extends ValidationContext {
7758
+ parent: SlugParent
7759
+ type: SlugSchemaType
7760
+ defaultIsUnique: SlugIsUniqueValidator
7761
+ }
7762
+
7763
+ /** @public */
7764
+ declare interface SlugValue {
7765
+ _type: 'slug'
7766
+ current?: string
7767
+ }
7768
+
7769
+ /** @beta */
7770
+ declare type SortOrdering = {
7771
+ title: string
7772
+ i18n?: I18nTextRecord<'title'>
7773
+ name: string
7774
+ by: SortOrderingItem[]
7775
+ }
7776
+
7777
+ /** @beta */
7778
+ declare interface SortOrderingItem {
7779
+ field: string
7780
+ direction: 'asc' | 'desc'
7781
+ }
7782
+
5727
7783
  declare type StrictExtract<T, U extends T> = U
5728
7784
 
7785
+ /** @public */
7786
+ declare interface StringDefinition extends BaseSchemaDefinition {
7787
+ type: 'string'
7788
+ options?: StringOptions
7789
+ placeholder?: string
7790
+ validation?: ValidationBuilder<StringRule, string>
7791
+ initialValue?: InitialValueProperty<any, string>
7792
+ }
7793
+
7794
+ /** @public */
7795
+ declare interface StringOptions
7796
+ extends EnumListProps<string>,
7797
+ SearchConfiguration,
7798
+ BaseSchemaTypeOptions {}
7799
+
7800
+ /** @public */
7801
+ declare interface StringRule extends RuleDef<StringRule, string> {
7802
+ min: (minNumber: number | FieldReference) => StringRule
7803
+ max: (maxNumber: number | FieldReference) => StringRule
7804
+ length: (exactLength: number | FieldReference) => StringRule
7805
+ uppercase: () => StringRule
7806
+ lowercase: () => StringRule
7807
+ regex(
7808
+ pattern: RegExp,
7809
+ name: string,
7810
+ options: {
7811
+ name?: string
7812
+ invert?: boolean
7813
+ },
7814
+ ): StringRule
7815
+ regex(
7816
+ pattern: RegExp,
7817
+ options: {
7818
+ name?: string
7819
+ invert?: boolean
7820
+ },
7821
+ ): StringRule
7822
+ regex(pattern: RegExp, name: string): StringRule
7823
+ regex(pattern: RegExp): StringRule
7824
+ email(): StringRule
7825
+ }
7826
+
7827
+ /**
7828
+ * This is used for string, text, date and datetime.
7829
+ * This interface represent the compiled version at runtime, when accessed through Schema.
7830
+ *
7831
+ * @public
7832
+ */
7833
+ declare interface StringSchemaType extends BaseSchemaType {
7834
+ jsonType: 'string'
7835
+ options?: StringOptions & TextOptions & DateOptions & DatetimeOptions
7836
+ initialValue?: InitialValueProperty<any, string>
7837
+ }
7838
+
5729
7839
  /**
5730
7840
  * @beta
5731
7841
  */
@@ -5875,9 +7985,199 @@ declare type TextBlockWithOptionalKey = Omit<PortableTextTextBlock, '_key'> & {
5875
7985
  _key?: PortableTextTextBlock['_key']
5876
7986
  }
5877
7987
 
7988
+ /** @public */
7989
+ declare interface TextDefinition extends BaseSchemaDefinition {
7990
+ type: 'text'
7991
+ rows?: number
7992
+ options?: TextOptions
7993
+ placeholder?: string
7994
+ validation?: ValidationBuilder<TextRule, string>
7995
+ initialValue?: InitialValueProperty<any, string>
7996
+ }
7997
+
7998
+ /** @public */
7999
+ declare interface TextOptions extends StringOptions {}
8000
+
8001
+ /** @public */
8002
+ declare interface TextRule extends StringRule {}
8003
+
8004
+ /** @public */
8005
+ declare interface TitledListValue<V = unknown> {
8006
+ _key?: string
8007
+ title: string
8008
+ value?: V
8009
+ }
8010
+
8011
+ /**
8012
+ * Represents a type definition that is an alias/extension of an existing type
8013
+ * in your schema. Creating a type alias will re-register that existing type
8014
+ * under a different name. You can also override the default type options with
8015
+ * a type alias definition.
8016
+ *
8017
+ * @public
8018
+ */
8019
+ declare interface TypeAliasDefinition<
8020
+ TType extends string,
8021
+ TAlias extends IntrinsicTypeName | undefined,
8022
+ > extends BaseSchemaDefinition {
8023
+ type: TType
8024
+ options?: TAlias extends IntrinsicTypeName
8025
+ ? IntrinsicDefinitions[TAlias]['options']
8026
+ : unknown
8027
+ validation?: SchemaValidationValue
8028
+ initialValue?: InitialValueProperty<any, any>
8029
+ preview?: PreviewConfig
8030
+ components?: {
8031
+ annotation?: ComponentType<any>
8032
+ block?: ComponentType<any>
8033
+ inlineBlock?: ComponentType<any>
8034
+ diff?: ComponentType<any>
8035
+ field?: ComponentType<any>
8036
+ input?: ComponentType<any>
8037
+ item?: ComponentType<any>
8038
+ preview?: ComponentType<any>
8039
+ }
8040
+ }
8041
+
8042
+ /**
8043
+ * Represents a reference to another type registered top-level in your schema.
8044
+ *
8045
+ * @public
8046
+ */
8047
+ declare interface TypeReference {
8048
+ type: string
8049
+ name?: string
8050
+ icon?: ComponentType | ReactNode
8051
+ options?: {
8052
+ [key: string]: unknown
8053
+ }
8054
+ }
8055
+
5878
8056
  declare type UnsetEvent = {
5879
8057
  type: 'unset'
5880
8058
  previousValue: Array<PortableTextBlock>
5881
8059
  }
5882
8060
 
8061
+ /** @public */
8062
+ declare interface UriValidationOptions {
8063
+ scheme?: (string | RegExp) | Array<string | RegExp>
8064
+ allowRelative?: boolean
8065
+ relativeOnly?: boolean
8066
+ allowCredentials?: boolean
8067
+ }
8068
+
8069
+ /** @public */
8070
+ declare interface UrlDefinition extends BaseSchemaDefinition {
8071
+ type: 'url'
8072
+ options?: UrlOptions
8073
+ placeholder?: string
8074
+ validation?: ValidationBuilder<UrlRule, string>
8075
+ initialValue?: InitialValueProperty<any, string>
8076
+ }
8077
+
8078
+ /** @public */
8079
+ declare interface UrlOptions extends BaseSchemaTypeOptions {}
8080
+
8081
+ /** @public */
8082
+ declare interface UrlRule extends RuleDef<UrlRule, string> {
8083
+ uri(options: UriValidationOptions): UrlRule
8084
+ }
8085
+
8086
+ /** @public */
8087
+ declare type ValidationBuilder<
8088
+ T extends RuleDef<T, FieldValue>,
8089
+ FieldValue = unknown,
8090
+ > = (rule: T) => RuleBuilder<T, FieldValue>
8091
+
8092
+ /**
8093
+ * A context object passed around during validation. This includes the
8094
+ * `Rule.custom` context.
8095
+ *
8096
+ * e.g.
8097
+ *
8098
+ * ```js
8099
+ * Rule.custom((_, validationContext) => {
8100
+ * // ...
8101
+ * })`
8102
+ * ```
8103
+ *
8104
+ * @public
8105
+ */
8106
+ declare interface ValidationContext {
8107
+ getClient: (options: {apiVersion: string}) => SanityClient
8108
+ schema: Schema
8109
+ parent?: unknown
8110
+ type?: SchemaType
8111
+ document?: SanityDocument
8112
+ path?: Path
8113
+ getDocumentExists?: (options: {id: string}) => Promise<boolean>
8114
+ environment: 'cli' | 'studio'
8115
+ }
8116
+
8117
+ /**
8118
+ * The shape that can be returned from a custom validator to be converted into
8119
+ * a validation marker by the validation logic. Inside of a custom validator,
8120
+ * you can return an array of these in order to specify multiple paths within
8121
+ * an object or array.
8122
+ *
8123
+ * @public
8124
+ */
8125
+ declare interface ValidationError {
8126
+ /**
8127
+ * The message describing why the value is not valid. This message will be
8128
+ * included in the validation markers after validation has finished running.
8129
+ */
8130
+ message: string
8131
+ /**
8132
+ * If writing a custom validator, you can return validation messages to
8133
+ * specific path inside of the current value (object or array) by populating
8134
+ * this `path` prop.
8135
+ *
8136
+ * NOTE: This path is relative to the current value and _not_ relative to
8137
+ * the document.
8138
+ */
8139
+ path?: Path
8140
+ /**
8141
+ * Same as `path` but allows more than one value. If provided, the same
8142
+ * message will create two markers from each path with the same message
8143
+ * provided.
8144
+ *
8145
+ * @deprecated prefer `path`
8146
+ */
8147
+ paths?: Path[]
8148
+ /**
8149
+ * @deprecated Unused. Was used to store the results from `.either()` /`.all()`
8150
+ */
8151
+ children?: ValidationMarker[]
8152
+ /**
8153
+ * @deprecated Unused. Was used to signal if this error came from an `.either()`/`.all()`.
8154
+ */
8155
+ operation?: 'AND' | 'OR'
8156
+ /**
8157
+ * @deprecated Unused. Was relevant when validation error was used as a class.
8158
+ */
8159
+ cloneWithMessage?(message: string): ValidationError
8160
+ }
8161
+
8162
+ /** @public */
8163
+ declare interface ValidationMarker {
8164
+ level: 'error' | 'warning' | 'info'
8165
+ /**
8166
+ * The validation message for this marker. E.g. "Must be greater than 0"
8167
+ */
8168
+ message: string
8169
+ /**
8170
+ * @deprecated use `message` instead
8171
+ */
8172
+ item?: ValidationError
8173
+ /**
8174
+ * The sanity path _relative to the root of the current document_ to this
8175
+ * marker.
8176
+ *
8177
+ * NOTE: Sanity paths may contain keyed segments (i.e. `{_key: string}`) that
8178
+ * are not compatible with deep getters like lodash/get
8179
+ */
8180
+ path: Path
8181
+ }
8182
+
5883
8183
  export {}