sveld 0.27.0 → 0.28.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 CHANGED
@@ -119,6 +119,7 @@ export default class Button extends SvelteComponentTyped<
119
119
  - [API Reference](#api-reference)
120
120
  - [@type](#type)
121
121
  - [@typedef](#typedef)
122
+ - [@callback](#callback)
122
123
  - [@slot](#slot)
123
124
  - [Svelte 5 Snippet Compatibility](#svelte-5-snippet-compatibility)
124
125
  - [@event](#event)
@@ -484,6 +485,69 @@ export type ComponentProps = {
484
485
 
485
486
  > **Note:** The inline syntax `@typedef {{ name: string }} User` continues to work for backwards compatibility.
486
487
 
488
+ ### `@callback`
489
+
490
+ The `@callback` tag defines a function type using `@param` and `@returns` tags, following the [TypeScript JSDoc `@callback` specification](https://www.typescriptlang.org/docs/handbook/jsdoc-supported-types.html#callback). Like `@typedef`, callbacks are exported from the generated TypeScript definition file.
491
+
492
+ This is useful for typing callback props without using inline function type syntax.
493
+
494
+ Signature:
495
+
496
+ ```js
497
+ /**
498
+ * Optional description
499
+ * @callback CallbackName
500
+ * @param {Type} paramName - Parameter description
501
+ * @returns {ReturnType}
502
+ */
503
+ ```
504
+
505
+ Example:
506
+
507
+ ```js
508
+ /**
509
+ * Callback fired when the value changes
510
+ * @callback OnChange
511
+ * @param {string} value - The new value
512
+ * @param {number} index - The index of the changed item
513
+ * @returns {void}
514
+ */
515
+
516
+ /** @type {OnChange} */
517
+ export let onChange = (value, index) => {};
518
+ ```
519
+
520
+ Output:
521
+
522
+ ```ts
523
+ /**
524
+ * Callback fired when the value changes
525
+ */
526
+ export type OnChange = (value: string, index: number) => void;
527
+
528
+ export type ComponentProps = {
529
+ /**
530
+ * Callback fired when the value changes
531
+ */
532
+ onChange?: OnChange;
533
+ };
534
+ ```
535
+
536
+ Callbacks can be combined with `@typedef` in the same comment block:
537
+
538
+ ```js
539
+ /**
540
+ * @typedef {"asc" | "desc"} SortDirection
541
+ * @callback SortFn
542
+ * @param {any} a
543
+ * @param {any} b
544
+ * @param {SortDirection} direction
545
+ * @returns {number}
546
+ */
547
+ ```
548
+
549
+ When `@returns` is omitted, the return type defaults to `void`. When no `@param` tags are present, the callback is typed as a no-argument function.
550
+
487
551
  ### `@slot`
488
552
 
489
553
  Use the `@slot` tag for typing component slots. Note that `@slot` is a non-standard JSDoc tag.
@@ -601,7 +601,7 @@ export default class ComponentParser {
601
601
  * Parses custom types, events, slots, and other JSDoc annotations from component comments.
602
602
  *
603
603
  * Scans the entire source for JSDoc comment blocks and extracts structured information
604
- * about events, typedefs, slots, extends, restProps, and generics. Handles complex
604
+ * about events, typedefs, callbacks, slots, extends, restProps, and generics. Handles complex
605
605
  * description extraction logic that supports both inline descriptions and preceding
606
606
  * line descriptions.
607
607
  *