Simplifies writing DocBlock comments in Javascript, PHP, CoffeeScript, Actionscript, C & C++

Overview

DocBlockr

DocBlockr is a package for Sublime Text 2 & 3 which makes writing documentation a breeze. DocBlockr supports JavaScript (including ES6), PHP, ActionScript, Haxe, CoffeeScript, TypeScript, Java, Apex, Groovy, Objective C, C, C++ and Rust.

Installation

Package Control

  1. Open Package Control: Preferences -> Package Control
  2. Select Package Control: Install Package
  3. Type DocBlockr into the search box and select the package to install it

Feature requests & bug reports

You can leave either of these things here. Pull requests are welcomed heartily, but please read CONTRIBUTING.md first! Basically: in this repo, the main development branch is develop and the stable 'production' branch is master. Please remember to base your branch from develop and issue the pull request back to that branch.

Show your love

Click here to lend your support to: DocBlockr and make a donation at pledgie.com!

Changelog

  • v2.14.1, 17 Aug 2015
    • Fix deindentation bug with reparsing doc blocks
  • v2.14.0, 15 Jun 2015
    • Adds jsdocs_function_description option (thanks to Gerard Roche)
    • Better handling of parser errors (thanks to Gerard Roche)
  • v2.13.3, 4 Jun 2015
    • PHP array shorthand is identified correctly (thanks to Gerard Roche)
    • Decorating comments when using tabs for indentation works better (thanks to Jack Cherng)
  • v2.13.2, 30 Mar 2015
    • Updated PHPDoc autocompletions to align with the new spec (thanks to Gerard Roche)
    • Properly handle the case when commas appear inside a type name in Java
    • Added link to README in the preferences menu
  • v2.13.1, 29 Mar 2015
    • Adds support for Apex language (thanks @michacom)
    • Fixes identifying multidimensional arrays in C/C++
    • Fixes reformatting and reparsing docblocks in Java
    • Adds options to disable:
      • opening an inline docblock with space (jsdocs_quick_open_inline)
      • inline comment decoration (jsdocs_decorate)

Older history can be found in the history file.

Usage

Below are some examples of what the package does. Note that there are no keyboard shortcuts required to trigger these completions - just type as normal and it happens for you!

Docblock completion

Pressing enter or tab after /** (or ###* for Coffee-Script) yields a new line and closes the comment.

Single-asterisk comment blocks behave similarly:

Function documentation

However, if the line directly afterwards contains a function definition, then its name and parameters are parsed and some documentation is automatically added.

Press Tab to move forward through the fields, press Shift+Tab to move back through the fields.

If there are many arguments, or long variable names, it is sometimes useful to spread the arguments across multiple lines. DocBlockr handles this situation too:

In languages which support type hinting or default values, then those types are prefilled as the datatypes.

DocBlockr will try to make an intelligent guess about the return value of the function.

  • If the function name is or begins with "set" or "add", then no @return is inserted.
  • If the function name is or begins with "is" or "has", then it is assumed to return a Boolean.
  • In Javascript, if the function begins with an uppercase letter then it is assumed that the function is a class definition. No @return tag is added.
  • In PHP, some of the magic methods have their values prefilled:
    • __construct, __destruct, __set, __unset, __wakeup have no @return tag.
    • __sleep returns an array.
    • __toString returns a string.
    • __isset returns a bool.
  • In ES6 Javascript, generator functions get a @yield tag instead of @return

Variable documentation

If the line following the docblock contains a variable declaration, DocBlockr will try to determine the data type of the variable and insert that into the comment.

Press space or shift+enter after an opening /** to insert an inline docblock.

DocBlockr will also try to determine the type of the variable from its name. Variables starting with is or has are assumed to be booleans, and callback, cb, done, fn, and next are assumed to be functions. If you use your own variable naming system, (e.g. hungarian notation: booleans all start with b, arrays start with arr), you can define these rules yourself. Use the jsdocs_notation_map setting, example:

{
    "jsdocs_notation_map": [
        {
            "prefix": "b", /* a prefix, matches only if followed by an underscore or A-Z */
            "type": "bool" /* translates to "Boolean" in javascript, "bool" in PHP */
        },
        {
            "regex": "tbl_?[Rr]ow", /* any arbitrary regex to test against the variable name */
            "type": "TableRow"      /* you can add your own types */
        }
    ]
}

The notation map can also be used to add arbitrary tags, according to your own code conventions. For example, if your conventions state that functions beginning with an underscore are private, you could add this to the jsdocs_notation_map:

{
    "prefix": "_",
    "tags": ["@private"]
}

Comment extension

Pressing enter inside a docblock will automatically insert a leading asterisk and maintain your indentation.

This applies to docblock comments /** like this */ as well as inline double-slash comments // like this

In either case, you can press shift+enter to stop the automatic extension.

Oftentimes, when documenting a parameter, or adding a description to a tag, your description will cover multiple lines. If the line you are on is directly following a tag line, pressing Tab will move the indentation to the correct position.

Comment decoration

If you write a double-slash comment and then press Ctrl+Enter, DocBlockr will 'decorate' that line for you.

// Foo bar baz<<Ctrl+Enter>>

-- becomes

/////////////////
// Foo bar baz //
/////////////////

This can be disabled by changing the jsdocs_decorate setting to false.

Reparsing a DocBlock

Sometimes, you'll perform some action which clears the fields (sections of text which you can navigate through using Tab). This leaves you with a number of placeholders in the DocBlock with no easy way to jump to them.

With DocBlockr, you can reparse a comment and reactivate the fields by pressing the hotkey Alt+Shift+Tab in OS X or Linux, or Alt+W in Windows

Reformatting paragraphs

Inside a comment block, hit Alt+Q to wrap the lines to make them fit within your rulers. If you would like subsequent lines in a paragraph to be indented, you can adjust the jsdocs_indentation_spaces_same_para setting. For example, a value of 3 might look like this:

/**
 * Duis sed arcu non tellus eleifend ullamcorper quis non erat. Curabitur
 *   metus elit, ultrices et tristique a, blandit at justo.
 * @param  {String} foo Lorem ipsum dolor sit amet.
 * @param  {Number} bar Nullam fringilla feugiat pretium. Quisque
 *   consectetur, risus eu pellentesque tincidunt, nulla ipsum imperdiet
 *   massa, sit amet adipiscing dolor.
 * @return {[type]}
 */

Adding extra tags

Finally, typing @ inside a docblock will show a completion list for all tags supported by JSDoc, the Google Closure Compiler, YUIDoc or PHPDoc. Extra help is provided for each of these tags by prefilling the arguments each expects. Pressing Tab will move the cursor to the next argument.

Configuration

You can access the configuration settings by selecting Preferences -> Package Settings -> DocBlockr.

The jsdocs_* prefix is a legacy from days gone by...

  • jsdocs_indentation_spaces (Number) The number of spaces to indent after the leading asterisk.

      // jsdocs_indentation_spaces = 1
      /**
       * foo
       */
    
      // jsdocs_indentation_spaces = 5
      /**
       *     foo
       */
    
  • jsdocs_align_tags (String) Whether the words following the tags should align. Possible values are 'no', 'shallow' and 'deep'

    For backwards compatibility, false is equivalent to 'no', true is equivalent to 'shallow'

    'shallow' will align only the first words after the tag. eg:

      @param    {MyCustomClass} myVariable desc1
      @return   {String} foo desc2
      @property {Number} blahblah desc3
    

    'deep' will align each component of the tags, eg:

      @param    {MyCustomClass} myVariable desc1
      @return   {String}        foo        desc2
      @property {Number}        blahblah   desc3
    
  • jsdocs_extra_tags (Array.String) An array of strings, each representing extra boilerplate comments to add to functions. These can also include arbitrary text (not just tags).

      // jsdocs_extra_tags = ['This is a cool function', '@author nickf', '@version ${1:[version]}']
      /**<<enter>>
      function foo (x) {}
    
      /**
       * [foo description]
       * This is a cool function
       * @author nickf
       * @version [version]
       * @param  {[type]} x [description]
       * @return {[type]}
       */
      function foo (x) {}
    

    Basic variable substitution is supported here for the variables date and datetime, wrapped in double curly brackets.

      // jsdocs_extra_tags = ['@date {{date}}', '@anotherdate {{datetime}}']
      /**<<enter>>
      function foo() {}
    
      /**
       * [foo description]
       * @date     2013-03-25
       * @datetime 2013-03-25T21:16:25+0100
       * @return   {[type]}
       */
    
  • jsdocs_extra_tags_go_after (Boolean) If true, the extra tags are placed at the end of the block (after param/return). Default: false

  • jsdocs_extend_double_slash (Boolean) Whether double-slash comments should be extended. An example of this feature is described above. Default: true

  • jsdocs_deep_indent (Boolean) Whether pressing tab at the start of a line in docblock should indent to match the previous line's description field. An example of this feature is described above. Default: true

  • jsdocs_notation_map (Array) An array of notation objects. Each notation object must define either a prefix OR a regex property, and a type property.

  • jsdocs_return_tag (String) The text which should be used for a @return tag. By default, @return is used, however this can be changed to @returns if you use that style.

  • jsdocs_spacer_between_sections (Boolean|String) If true, then extra blank lines are inserted between the sections of the docblock. If set to "after_description" then a spacer will only be added between the description and the first tag. Default: false.

  • jsdocs_indentation_spaces_same_para (Number) Described above in the Reformatting paragraphs section. Default: 1

  • jsdocs_autoadd_method_tag (Boolean) Add a @method tag to docblocks of functions. Default: false

  • jsdocs_simple_mode (Boolean) If true, DocBlockr won't add a template when creating a doc block before a function or variable. Useful if you don't want to write Javadoc-style, but still want your editor to help when writing block comments. Default: false

  • jsdocs_lower_case_primitives (Boolean) If true, primitive data types are added in lower case, eg "number" instead of "Number". Default: false

  • jsdocs_short_primitives (Boolean) If true, the primitives Boolean and Integer are shortened to Bool and Int. Default: false

  • jsdocs_newline_after_block (Boolean) If true, an extra line break is added after the end of a docblock to separate it from the code. Default false

  • jsdocs_param_name (Boolean) If true, the name of a function parameter is added to the template. If false, it is omitted. Default: true

  • jsdocs_decorate (Boolean) If false, disable decoration of single line comments with Ctrl+Enter. Default: true

  • jsdocs_quick_open_inline (Boolean) If true, an inline docblock will be opened when pressing Space after an opener (/**). When set to false, these can be opened by pressing Shift+Enter. Default: true

  • jsdocs_function_description (Boolean) If true, a 'description' line will be added for functions. Default: true

Contributors

This package was created by Nick Fisher, but has many contributions from others. Please take a look at the contributors list to see who else should get some thanks.

Comments
  • Comment block freezing

    Comment block freezing

    When entering /** and pressing tab or enter above a method or a variable in a class, there's no response. In fact, I can't press or enter or tab, it just highlights the rest of the file. I just installed it today using the Packages Controller.

    opened by dboutote 36
  • Plugin not working

    Plugin not working

    Hi,

    When I type "/**" above a function like the one below and then press Enter or Tab nothing happens, the cursor doesn't move. But when I press Space then Enter and type the first star, all the following Enter will automaticaly add a star at the beginning of the line (which wasn't the case before I installed the plugin).

    The test function (inside a module pattern):

    var addEvents = function()
    {
        showLinksOnHover();
    };
    
    opened by devantoine 16
  • Allow for other contexts (css)

    Allow for other contexts (css)

    Namely, CSS / Sass / SCSS is what I'm wanting.

    While there is acutally a cssdoc spec: http://cssdoc.net/, I don't so much care about that, as it would be nice to just have a base level of functionality you could easily extend to specified contexts.

    In Textmate, I would just have a docBlock snippet that I applied to all the contexts I wanted. Best way to do that here?

    opened by timkelty 15
  • Newline between description and tags

    Newline between description and tags

    I would like to have a newline between the description and tags of a method/class like this:

    /**
     * [description]
     *
     * @param [type] $foo
     */
    public function doFoo($foo) {}
    

    ATM if I insert a manual line break after filling [description], tabbing through the placeholders does not work anymore. The cursor position is indented in the newly added line instead.

    I know this sounds similar to #227 but that one has a misleading title. I do not want to put a line between the whole docblock and method but only after the description.

    opened by mbrodala 14
  • I never got it working for any language, what to do?

    I never got it working for any language, what to do?

    issyncedsidebarenabled

    I am using the default settings, and the plugin is running without errors.

    My installed packages: https://github.com/evandrocoan/SublimeTextStudio/blob/master/User/Package%20Control.sublime-settings

    Sublime Text version 3114 - Windows 10

    opened by evandrocoan 13
  • Allow configuration of default function prefix to assign @private

    Allow configuration of default function prefix to assign @private

    At this moment, any function that starts with an underscore, is marked as @private by default, which is awesome.

    However in Javascript there's no private/protected methods (unless you're using the module pattern), therefore the convention to mark private/protected methods vary greatly... Some people even use $ instead of _ to do this differentiation...

    So what I'm suggesting is to allow this prefix to be configured in the user options or maybe extend the jsdocs_notation_map to also apply to function names, this way it would be possible to add private and protected methods to the doc block, independently of the syntax used =)

    opened by Couto 13
  • Bug in Sublime Text 3

    Bug in Sublime Text 3

    When I create a basic comment :

    /**
    public function something();
    

    And try ty press enter, nothing happens, the cursor is stuck, I get this in the console :

    Traceback (most recent call last):
      File "/Applications/Sublime Text 3/Sublime Text.app/Contents/MacOS/sublime_plugin.py", line 549, in run_
        return self.run(edit)
      File "/Users/laurentchastel/Library/Application Support/Sublime Text 3/Installed Packages/DocBlockr.sublime-package/jsdocs.py", line 88, in run
      File "/Users/laurentchastel/Library/Application Support/Sublime Text 3/Installed Packages/DocBlockr.sublime-package/jsdocs.py", line 128, in generateSnippet
      File "/Users/laurentchastel/Library/Application Support/Sublime Text 3/Installed Packages/DocBlockr.sublime-package/jsdocs.py", line 154, in alignTags
    TypeError: object of type 'map' has no len()
    
    opened by Anahkiasen 12
  • Refuses to parse php __construct

    Refuses to parse php __construct

    Here's the console error message

    Traceback (most recent call last):
      File "/Applications/Sublime Text.app/Contents/MacOS/sublime_plugin.py", line 549, in run_
        return self.run(edit)
      File "jsdocs in /Users/designermonkey/Library/Application Support/Sublime Text 3/Installed Packages/DocBlockr.sublime-package", line 148, in run
      File "jsdocs in /Users/designermonkey/Library/Application Support/Sublime Text 3/Installed Packages/DocBlockr.sublime-package", line 343, in parse
      File "jsdocs in /Users/designermonkey/Library/Application Support/Sublime Text 3/Installed Packages/DocBlockr.sublime-package", line 411, in formatFunction
      File "jsdocs in /Users/designermonkey/Library/Application Support/Sublime Text 3/Installed Packages/DocBlockr.sublime-package", line 486, in parseArgs
      File "jsdocs in /Users/designermonkey/Library/Application Support/Sublime Text 3/Installed Packages/DocBlockr.sublime-package", line 494, in getArgInfo
      File "jsdocs in /Users/designermonkey/Library/Application Support/Sublime Text 3/Installed Packages/DocBlockr.sublime-package", line 783, in getArgType
    TypeError: Can't convert 'NoneType' object to str implicitly
    

    Hope this helps.

    opened by designermonkey 9
  • Multi-line tab to indent just jumps to next param

    Multi-line tab to indent just jumps to next param

    Expected:

    /**
     * @param {String} foo Lorem ipsum dolor sit amet
     * |<<tab>>
     */
    
     -- becomes
    
    /**
     * @param {String} foo Lorem ipsum dolor sit amet
     *                     |
     */
    

    But in a multi param situation like this:

     * @param  {Array} array  The Array that does a thing
     * |<<tab>>
     * @param  {[type]} action [description]
     * @return {[type]}        [description]
    

    tab will move to the next @param {[type]} block instead of indenting to match the line above. Very possible this is a PEBKAC issues :D

    opened by robdodson 9
  • YUIDoc not supported

    YUIDoc not supported

    I would like to be able to use this tool, but it doesn't automatically tag methods or classes.

    Here's some sample code:

    var ViewCellGridSpecial = ViewCellGridBase.extend(
    {
        initialize: function( options )
        {
            this._availableLinesForProductTitle = 4;
            ViewCellGridSpecial.__super__.initialize.apply( this, arguments );
        },
    
        _doPricingDisplayLogic: function()
        {
            doSomething();
        }
    }
    );
    
    opened by nym 9
  • Can't write @ inside the docblocker.

    Can't write @ inside the docblocker.

    After installing DocBlockr to Sublime Text 3,

    When I try to add @ [at] sign inside a docblock, it prevents the default functionality of my keyboard and instead, removes white spaces and empty lines inside the docBlock.

    My keyboard layout is 'Turkish Q' and by default, '[AltGr] + Q' types an @ [at] sign.

    opened by erdemkeren 8
  • Default value for jsdocs_decorate

    Default value for jsdocs_decorate

    HI,

    "jsdocs_decorate" is a cool-looking feature, but please consider having it off by default. Chances are, users edit code more often than doing ASCII art with comments.

    opened by ratijas 0
  • Feature: param name position setting

    Feature: param name position setting

    First off, thanks for the amazing package. I have a feature request to add a default position of the param name of the @param tag. The typical format is @param {[Type]} param_name with options to set things like the spacing and whether to include the param name. I'm not sure how widespread this is, but I have always used the convention of @param param_name {[Type]}. Would it be possible to add something like jsdocs_param_name_before: true/false or jsdocs_param_name_position: 'after'/'before', so we can configure where the param name is placed?

    opened by baka-san 0
  • PHP7.4 Return type not being detected

    PHP7.4 Return type not being detected

    <?
    /**
     * [test description]
     * @param  bool|boolean $test [description]
     * @return [type]             [description]
     */
    function test(bool $test = true) : bool {
    	return false;
    }
    ?>
    

    The return type above is specified as bool, but [type] is used in the auto-generated docblock.

    Expected result is:

    <?
    /**
     * [test description]
     * @param  bool|boolean $test [description]
     * @return bool               [description]
     */
    function test(bool $test = true) : bool {
    	return false;
    }
    ?>
    
    opened by leon-v 0
  • PHP7.4 bool getting confused by boolean

    PHP7.4 bool getting confused by boolean

    <?
    /**
     * [test description]
     * @param  bool|boolean $test [description]
     * @return [type]             [description]
     */
    function test(bool $test = true) : bool {
    	return false;
    }
    ?>
    

    When a function contains a declared parameter of bool and a default value set to true or false, it get incorrectly detected as boolean and thinks bool is different.

    I recommend changing type boolean to bool.

    In PHP boolean is a synonym of bool, but boolean values true and false are of type bool.

    The importance of adhering to bool over boolean is because:

    function test(boolean $test = true){ ... }
    

    would produce a fatal error when the default is used.

    References: https://stackoverflow.com/questions/44009037/php-bool-vs-boolean-type-hinting https://www.php.net/manual/en/functions.arguments.php#functions.arguments.type-declaration https://www.php.net/manual/en/language.types.boolean.php

    opened by leon-v 0
  • Bulk DocBlock Generation for a file or folder

    Bulk DocBlock Generation for a file or folder

    Is it possible to add support for parsing entire files or even folders and automatically inserting the DocBlock for all functions and classes? While it is obviously better to document as one writes code, some code bases do not have DocBlocks at all. Unfortunately these code bases include thousands of functions so manually using this plugin would take a great deal of time.

    My idea would be to have something similar to This Project where multiple files can be parsed and automatically DocBlocked at once. The problem with the project listed above is that it only supports old versions of PHP (versions before 5.4 it looks like, which is very out of date).

    opened by acharris22306 0
Owner
Nick Fisher
Nick Fisher
Laravel comments - This package enables to easily associate comments to any Eloquent model in your Laravel application

Laravel comments - This package enables to easily associate comments to any Eloquent model in your Laravel application

Rubik 4 May 12, 2022
A simple Content Moderation System for Laravel 5.* that allows you to Approve or Reject resources like posts, comments, users, etc.

Laravel Moderation A simple Moderation System for Laravel 5.* that allows you to Approve or Reject resources like posts, comments, users, etc. Keep yo

Alex Kyriakidis 509 Dec 30, 2022
Native comments for your Laravel application.

Comments Comments is a Laravel package. With it you can easily implement native comments for your application. Overview This package can be used to co

Laravelista 626 Dec 30, 2022
Madison is a platform for lawmakers to share legislation with their citizens, allowing the community to add comments and suggest improvements.

Madison Madison is an open-source document engagement and feedback platform. While Madison can be used to collaborate on many different kinds of docum

OpenGov Foundation 591 Dec 17, 2022
An index of Laravel's cascading comments

Cascading Comments An index of Laravel's cascading comments. Visit the site at cascading-comments.sjorso.com. About This is a cascading comment: casca

Sjors Ottjes 4 Apr 28, 2022
A dead-simple comments package for Laravel.

A dead-simple comments package for Laravel. This package provides an incredibly simple comment system for your Laravel applications. If you're looking

Ryan Chandler 120 Dec 4, 2022
Laravel 5 package for reading and writing CSV files.

CSV Laravel 5 package for reading and writing CSV files. Warning The package has been updated to PHP 7. If you can't update to PHP 7 use version 0.6.x

Maciej Wilgucki 48 Nov 29, 2022
Object-oriented, composable, fluent API for writing validations in Laravel

Laravel Hyrule Hyrule provides an object-oriented, fluent API for building validation rules for use w/ Laravel's Validation component. This unlocks pa

Square 330 Dec 8, 2022
Generate robust laravel athorization without writing a single line of code.

Implement robust laravel authorization logic without writing a single line of code This package helps you to quickly create strong policy authorizatio

Flixtechs 29 Oct 15, 2022
Lavacharts is a graphing / charting library for PHP 5.4+ that wraps Google's Javascript Chart API.

Lavacharts 3.1.12 Lavacharts is a graphing / chart library for PHP5.4+ that wraps the Google Chart API. Stable: Dev: Developer Note Please don't be di

Kevin Hill 616 Dec 17, 2022
Boilerplate code for protecting a form with proof of work. Uses javascript in the browser to generate the hashcash and PHP on the server to generate the puzzle and validate the proof of work.

Boilerplate code for protecting a form with proof of work. Uses javascript in the browser to generate the hashcash and PHP on the server to generate the puzzle and validate the proof of work.

Jameson Lopp 28 Dec 19, 2022
Register for multiple Livestorm sessions from an external form. Practical use of Livestorm API with PHP/Javascript.

Livestorm Multi Session Registration Register for multiple Livestorm sessions from an external form. Practical use of Livestorm API with PHP/Javascrip

Nathan CHEVALIER 0 Dec 24, 2021
Loja virtual fictícia para compra de produtos e estilização dos mesmos. Desenvolvido com as tecnologias: HTML, CSS, PHP, CODEIGNITER, JavaScript, Bootstrap e Mysql.

StampGeek Loja virtual fictícia para compra de produtos e estilização dos mesmos. Desenvolvido com as tecnologias: HTML, CSS, PHP, CODEIGNITER, JavaSc

Pablo Silva 1 Jan 13, 2022
PcTools is a proyect developed using {JavaScript,HTML5,CSS} for frontend and {PHP => Mysql} for backend.

PcTools-Proyect PcTools is a proyect developed using {JavaScript,HTML5,CSS} for frontend and {PHP => Mysql} for backend. Future Improvements # Replace

Ihab Fallahy 1 Feb 5, 2022
Video Chat application built using Metered Video SDK, with PHP Laravel Backend and JavaScript Front-End

Group Video Chat App with PHP Laravel and JavaScript Powered by Metered Video SDK Overview This application is a highly scalable group video calling a

null 2 Aug 18, 2022
Laravel routes from Javascript

Laravel Javascript Routes Why? I love the Laravel 4 routing system and I often use named routes like route('users.show', array('id' => 1)) to generate

Fede Isas 63 Oct 10, 2022
A BEAUTIFUL, RESPONSIVE, CUSTOMIZABLE, ACCESSIBLE (WAI-ARIA) REPLACEMENT FOR JAVASCRIPT'S POPUP BOXES FOR LARAVEL

A BEAUTIFUL, RESPONSIVE, CUSTOMIZABLE, ACCESSIBLE (WAI-ARIA) REPLACEMENT FOR JAVASCRIPT'S POPUP BOXES FOR LARAVEL Install To get started with SweetAle

Rashid Ali 939 Jan 8, 2023
Use ESM with importmap to manage modern JavaScript in Laravel without transpiling or bundling

Introduction Use ESM with importmap to manage modern JavaScript in Laravel without transpiling or bundling. Inspiration This package was inspired by t

Tony Messias 91 Dec 30, 2022
The Most Popular JavaScript Calendar as a Filament Widget 💛

The Most Popular JavaScript Calendar as a Filament Widget ?? Features Accepts all configurations from FullCalendar Event click and drop events Upcomin

Guilherme Saade 62 Dec 31, 2022