Giter Site home page Giter Site logo

lara-zeus / bolt Goto Github PK

View Code? Open in Web Editor NEW
165.0 3.0 29.0 2.51 MB

form builder for your users, with so many use cases

Home Page: https://larazeus.com/bolt

License: MIT License

PHP 90.22% Blade 9.78%
zeus laravel forms bolt simple filament-plugin formbuilder builtatlightspeed form-maker laravel-form-builder

bolt's Introduction

Lara-zeus bolt is a form builder for your users with many use cases.

Latest Version on Packagist Latest Version on Packagist Tests Code Style Total Downloads Total Downloads

๐Ÿ’– if you think this has potential, star โญ๏ธ the project to let me know :)

Support Filament

filament-logo

Features

  • ๐Ÿ”ฅ built with filament
  • ๐Ÿ”ฅ FrontEnd scaffolding, highly customizable.
  • ๐Ÿ”ฅ Collections.
  • ๐Ÿ”ฅ Categories.
  • ๐Ÿ”ฅ Entries report.

Bolt Pro

bolt-pro

Overview

read more about the idea and how Bolt works.

Demo

Visit our demo site: https://demo.larazeus.com

Full Documentation

Visit our website to get the complete documentation: https://larazeus.com/docs/bolt

Quick start

starter-kit artemis

Changelog

Please see CHANGELOG for more information on recent changes.

Support

available support channels:

Contributing

Please see CONTRIBUTING for details.

Security

If you find any security-related issues, please email [email protected] instead of using the issue tracker.

Credits

License

The MIT License (MIT). Please have a look at License File for more information.

bolt's People

Contributors

atmonshi avatar aymanalhattami avatar brkfun avatar code-factor avatar dependabot[bot] avatar dkstudio86 avatar edsardio avatar github-actions[bot] avatar grafst avatar jvkassi avatar mohaphez avatar rawand201 avatar stylecibot avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

bolt's Issues

[Bug]: update translatable fields in form section resource and form field resource

What happened?

When updating section 'name', the new value is updated for all locales in the database

How to reproduce the bug

I choose 'Arabic' form dropdown then updated the section 'name' field
image

This is how result stored in database
image

The true value should be like ๐Ÿ‘‡
image

and the same issue when updating translatable field in field resource

Package Version

2.0.17

PHP Version

8.1

Laravel Version

10.24.0

Which operating systems does with happen with?

Windows

Notes

No response

Demo login error

Describe the bug
Login to the bolt demo is not working.

To Reproduce
Steps to reproduce the behavior:

  1. Go to https://demo.larazeus.com/admin/login
  2. Click on 'Sign in'
  3. See error 'These credentials do not match our records.'

Expected behavior
It should login to the bolt admin panel

Screenshots
image

Desktop (please complete the following information):
N/A

Smartphone (please complete the following information):
N/A

Additional context
N/A

[Bug]: Get error when open Select field options

What happened?

I got error when define the select field and open more options modal ,

image

How to reproduce the bug

According to the evidence, this happens when I have no collection records but have defined several dataSources.
When the collection is empty and there are several dataSources, an error is encountered during merge.
When I create a collection, this error is fixed and the list of data sources is loaded.

Package Version

3.0.38

PHP Version

8.2.10

Laravel Version

10.48

Which operating systems does with happen with?

Linux

Notes

No response

Any plans to add signature field?

Is your feature request related to a problem? Please describe.
Yes, the problem I'm facing is that the current form builder package does not include a "signature field" as an option. This is a crucial feature for my application as it requires users to provide their digital signatures.

Describe the solution you'd like
I would like to request the addition of a "signature field" in the form builder package. This field should allow users to input their digital signatures by either drawing on a canvas or uploading an image of their signature. The signature field should have options for customization, such as adjusting the size and color of the signature.

Describe alternatives you've considered
I have considered using external libraries or plugins to incorporate the signature functionality into the form builder. However, having this feature directly integrated into the form builder package would provide a more seamless and unified experience for developers and users.

Additional context
I believe that adding a signature field to the form builder package would greatly enhance its usability and make it more versatile for a wide range of applications. This feature would be particularly beneficial for forms that require user agreements, contracts, or any other document that requires a digital signature. Thank you for considering my feature request.

[Bug]: Filament\Forms\ComponentContainer::Filament\Forms\Concerns\{closure}(): Argument #1 ($component) must be of type Filament\Forms\Components\Component, null given

What happened?

I'm getting this error when editing/adding a form. It looks like it has to do with some Fields:

Checkbox
DateTimePicker
Toggle
DatePicker
RichEditor
TimePicker
Textarea
Paragraph

and specific with the Bolt::hasPro() true/false check --> null

so when i add a field "CheckBoxList" for example, then i receive the error:

Filament\Forms\ComponentContainer::Filament\Forms\Concerns\{closure}(): Argument #1 ($component) must be of type Filament\Forms\Components\Component, null given

After digging some deeper i came out at the function:

 public static function getOptionsHidden(): array

when i comment out the line:

Bolt::hasPro() ? \LaraZeus\BoltPro\Facades\GradeOptions::hidden() : null,

that part works and i won't get any error anymore.

So i tried using that return array to be with array_filter(). So that NULL values will be removed.
This helps.

I see a lot of places where Bolt::hasPro() is used and i think because maybe latest filament update cannot handle the null values for the "field Options" in the dialog.

i'm using Filament version: v3.2.85

How to reproduce the bug

update to latest filament and zeus-bolt. create a new form, and add a field with one of the types :

Checkbox
DateTimePicker
Toggle
DatePicker
RichEditor
TimePicker
Textarea
Paragraph

Package Version

3.0.46

PHP Version

8.3.7

Laravel Version

10.48.12

Which operating systems does with happen with?

No response

Notes

No response

[Bug]: override/array_merge of zeus-bolt.php config models does not work correctly with BoltPlugin::getModel('')

What happened?

in Configuration.php the getModel() function merges the config models array but the params should be flipped. otherwise the config models will be overriden and will not be used, and BoltPlugin::getModel('Category') will always be the package Category Model (\LaraZeus\Bolt\Models\Category::class) for example..

should be fixed when using the function like below:

public static function getModel(string $model): string
    {
        return array_merge(
            (new static())::get()->getBoltModels(),
            config('zeus-bolt.models')
        )[$model];
    }

How to reproduce the bug

override config classes in zeus-bolt.php file. and use BoltPlugin::getModel('Category') .

Package Version

3.0.39

PHP Version

8.3

Laravel Version

10.48.11

Which operating systems does with happen with?

No response

Notes

No response

[Bug]: Cannot submit new form

What happened?

Visit form page shows error:

Property type not supported in Livewire for property: [{"attributes":{},"request":{},"query":{},"server":{},"files":{},"cookies":{},"headers":{}}]

I also checked a demo form and got error https://demo.larazeus.com/bolt/diego

How to reproduce the bug

Create new form
Visit the form view page
Error thrown:

Property type not supported in Livewire for property: [{"attributes":{},"request":{},"query":{},"server":{},"files":{},"cookies":{},"headers":{}}]

Package Version

v2.0.1

PHP Version

8.2.8

Laravel Version

v10.20.0

Which operating systems does with happen with?

Linux

Notes

image

[Bug]: Project running issue

What happened?

I just install the fresh copy of lara-zeus starter kit via composer create-project Lara-zeus/zeus running command. Nicely installed. But while i login to admin and going to edit the form, i got error.
image

This error also in frontend. While going to open the form, it shows the error.

I manually add this table in database, but yet it shows me error.

Would you like to explain me the issues ?

How to reproduce the bug

Just run this command composer create-project Lara-zeus/zeus running and browse any forms in frontend. Login to admin and try to edit any form.

Package Version

2.0

PHP Version

8.1.10

Laravel Version

10.15

Which operating systems does with happen with?

Windows

Notes

No response

Enhancing the filtering capabilities on custom Datasources

Hi there !

At present, datasources utilize getModel to generate the required items, fetching all records of that model.
However, there are scenarios where filtering records based on conditions is necessary, rather than displaying all records to the user.
This implies that developers should have control over the query and be able to customize it.

For instance, displaying records related to the logged-in user

Do you believe this is achievable?

[Bug]: add logo for category does not work

What happened?

Adding logo for category does not work

How to reproduce the bug

I uploaded an image for category logo but nothing saved to database.

I also tried uploading a logo for category in larazeus demo and the same bug exists.

Package Version

2.0.9

PHP Version

8.1

Laravel Version

10.21.1

Which operating systems does with happen with?

Windows

Notes

No response

Enable customization of package functionality via service providers

Hi , Thank you for your great plugin

Currently, the package assumes that custom items such as fields and data sources are located in the App\Zeus folder, but I am using a modular structure and would prefer to have these items in one of my module folders.

Unfortunately, there is no way to change or customize the paths and namespaces for these items. I attempted to override the package's Facade classes, such as the Bolt class, but found that neither the interface nor the FacadeAccessor were used or resolved in the provider. Instead, the classes are used directly.

To improve the package's extensibility, I suggest binding these classes as interfaces or accessories via a service provider. This would make it easier for developers to customize and extend the package's functionality.

Additionally, I recommend storing the default paths in a configuration file so that they can be easily changed by developers who want to use a different folder structure. This would make the package more flexible and adaptable to different use cases.

Thank you for your attention to this matter, and I look forward to seeing improvements in the package's extensibility and customizability.

[Bug]:

What happened?

When trying to create a new field the user is unable to choose conditional field options till after the field is saved

How to reproduce the bug

When trying to create a new field the user is unable to choose conditional field options till after the field is saved

Package Version

2.1

PHP Version

8.2

Laravel Version

10.0

Which operating systems does with happen with?

macOS

Notes

No response

[Bug]: downgrading to v2.0.0-beta12 form v2.0.9 when run composer update command

What happened?

Package has been downgraded to v2.0.0-beta12

larazeus-bolt

How to reproduce the bug

When I run composer update, package has been downgraded to v2.0.0-beta12.

It should be upgraded to v2.0.10

Package Version

2.0.9

PHP Version

8.1

Laravel Version

10.22.0

Which operating systems does with happen with?

No response

Notes

No response

Command to Publish Filament Resources

Is your feature request related to a problem? Please describe.
It is good to have command for publish all filament resources. I need to make customization on FormResource

Describe the solution you'd like

  1. solution 1: set filament resource in zeus-bolt.php config file in the same way as models.
'resources' => [
    'FormResource' => \LaraZeus\Bolt\Filament\Resources\FormResource::class,
    'CollectionResource' => \LaraZeus\Bolt\Filament\Resources\CollectionResource::class,
    'CategoryResource' => \LaraZeus\Bolt\Filament\Resources\CategoryResource::class,
    'ResponseResource' => \LaraZeus\Bolt\Filament\Resources\ResponseResource::class,
],
  1. solution 2: make Laravel command to publish filament resources
php artisan lara-zeus-bolt:publish-filament-resources

Light/Dark theme

I'm using Bolt with Filament for administration and a frontend with Breeze for final user.
In the frontend I need to show Bolt's Forms with light theme but it always show with dark theme.

Is there any way to force "light theme"?

[Bug]: Select Field UI And Fields Not Showing

What happened?

I am unable to see the Select Fields:

image

How to reproduce the bug

Added Collection & Integrated with Select Fields, But Not Working as Excepted

image

My Tailwind Config:

content: [
        "./app/Colors/**/*.php",
        "./app/Helpers/Utilities.php",
        "./resources/**/*.blade.php",
        "./vendor/lara-zeus/core/resources/views/**/*.blade.php",
        "./vendor/lara-zeus/bolt/resources/views/themes/**/*.blade.php",
        "./vendor/lara-zeus/bolt/resources/views/filament/**/*.blade.php",
        "./vendor/filament/**/*.blade.php",
        "./node_modules/flowbite/**/*.js",
    ],

Package Version

3.0

PHP Version

8.2.0

Laravel Version

10.0

Which operating systems does with happen with?

No response

Notes

No response

[Bug]: Issues Due to Filament Component Dependency in Modal

What happened?

Fields such as tiptap, some of its functionalities, such as media selection and html code injection, which are dependent on the filament modal component, do not work.

How to reproduce the bug

When I added a custom field as a tiptap editor, some of its features that depend on the modal didn't work.

Package Version

3.0.57

PHP Version

8.2.10

Laravel Version

10.48

Which operating systems does with happen with?

Linux

Notes

No response

[Bug]: Non-Obvious Failed Validation on Form Options

What happened?

If you edit a form field's options and there is a validation issue, but the accordion is not expanded for that particular option, it's not apparent that it failed validation.


Validation error with closed accordion


Validation error with open accordion


These screenshots were taken in order, the only difference being that the Accordion was open in the second one.

How to reproduce the bug

The images above tell the story fairly well, but to spell it out in detail:

  1. Open field options.
  2. Enter options that do not fit validation. The easiest one I found is leaving the "Data Validation" field blank on TextInput.
  3. Collapse all Accordions or open a different Accordion than the one you know has the validation issue.
  4. Submit options modal form.

Modal won't close, so it's obvious that something errored, but it's difficult to tell what without expanding the Accordion(s).

Package Version

3.0.52

PHP Version

8.2.19

Laravel Version

11.10.0

Which operating systems does with happen with?

macOS

Notes

This was truthfully reproduced on the custom-schema branch, but it is up to date with the 3.x branch, and I don't see any reason why this feature branch would impact this aspect of the UI.

I'm unfamiliar with the Accordion internals, but it should be as "simple" as bubbling up the error to highlight the section and indicate an error inside.

Edit: Added some horizontal lines around the images. They were bleeding together, making it hard to see which was which.

conditionally show/hide sections

allow to show/hide sections conditionally.
for example "select the lang you want to answer the questions"
and show section (lang) based on the user choice

Route [bolt.forms.list] not defined

Describe the bug
When navigating to the Forms List I get the error: Route [bolt.forms.list] not defined.
(The other routes .ie entries, categories work)

To Reproduce
Steps to reproduce the behavior:

  1. composer require lara-zeus/bolt
  2. Add to AdminPanelProvider.php
  3. php artisan vendor:publish --tag=zeus-bolt-migrations
  4. php artisan migrate
  5. php artisan vendor:publish --tag=zeus-assets
  6. Go to https://xyz.test/admin/forms

Expected behavior
showing the list of forms

Desktop (please complete the following information):

  • OS: macOS
  • Browser: chrome
  • Version: 115

Additional context
https://flareapp.io/share/q5YWgJQP

Submission view not well formatted

Describe the bug
When viewing for submissions e.g. https://demo.larazeus.com/admin/responses/21, select field does not indicate selected option

To Reproduce
Steps to reproduce the behavior:

  1. Create a form. Ensure the form has one select dropdown option and set a collection for it to populate from
  2. Open its view page and fill some data for it. Ensure to select an options for the Select dropdown option
  3. Visit the responses view page e.g. https://demo.larazeus.com/admin/responses/21
  4. Observe error that the select dropdown field does not indicate user selected option but rather dumps a json string of the collection, as shown in screenshot below

Expected behavior
The select dropdown field should indicate user selected option instead of a json string of the collection

Screenshots
image

Desktop (please complete the following information):

  • OS: Linux
  • Browser: chrome
  • Version 1.2.11

[Bug]: Composer cannot install bolt version ^3

What happened?

when I try to install only bolt package the composer cannot resolve the others package dependencies.
That is the error mensage

"lara-zeus/bolt[v3.0.0, ..., v3.0.13] require alperenersoy/filament-export dev-fix-there -> found alperenersoy/filament-export[dev-main, v0.1.0-alpha, ..., v0.3.9, v3.0.0-beta, ..., v3.x-dev] but it does not match the constraint"

How to reproduce the bug

using that composer packages

"require": {
"php": "^8.1",
"bezhansalleh/filament-shield": "^3.1",
"filament/filament": "^3.2",
"guzzlehttp/guzzle": "^7.2",
"laravel/framework": "^10.10",
"laravel/sanctum": "^3.3",
"laravel/tinker": "^2.8"
},
"require-dev": {
"fakerphp/faker": "^1.9.1",
"laravel/pint": "^1.0",
"laravel/sail": "^1.18",
"mockery/mockery": "^1.4.4",
"nunomaduro/collision": "^7.0",
"phpunit/phpunit": "^10.1",
"spatie/laravel-ignition": "^2.0"
},

Try to run the composer require to install bolt

composer require lara-zeus/bolt:3.0.13

Package Version

^3

PHP Version

8.2.7

Laravel Version

^10.10

Which operating systems does with happen with?

Linux

Notes

No response

[Bug]: getCustomSchema will make problem for all of fields

What happened?

Filament\Forms\ComponentContainer::Filament\Forms\Concerns{closure}(): Argument #1 ($component) must be of type Filament\Forms\Components\Component, array given {"userId":4,"exception":"[object] (TypeError(code: 0): Filament\Forms\ComponentContainer::Filament\Forms\Concerns\{closure}(): Argument #1 ($component) must be of type Filament\Forms\Components\Component, null given at /home/yallaxom/public_html/vendor/filament/forms/src/Concerns/HasComponents.php:122)

How to reproduce the bug

in most of the fields this line makss problem in codes:
Bolt::getCustomSchema('field', resolve(static::class)) ?? []

example in FileUpload.php (vendor\lara-zeus\bolt\src\Fields\Classes\FileUpload.php)

public static function getOptions(?array $sections = null): array
    {
        return [
            Accordions::make('check-list-options')
                ->accordions([
                    Accordion::make('general-options')
                        ->label(__('General Options'))
                        ->icon('iconpark-checklist-o')
                        ->schema([
                            \Filament\Forms\Components\Toggle::make('options.allow_multiple')->label(__('Allow Multiple')),
                            self::required(),
                            self::columnSpanFull(),
                            self::htmlID(),
                        ]),
                    self::hintOptions(),
                    self::visibility($sections),
                    Bolt::getCustomSchema('field', resolve(static::class)) ?? [],
                ]),
        ];
    }

error :
Filament\Forms\ComponentContainer::Filament\Forms\Concerns\{closure}(): Argument #1 ($component) must be of type Filament\Forms\Components\Component, null given {"userId":4,"exception":"[object] (TypeError(code: 0): Filament\\Forms\\ComponentContainer::Filament\\Forms\\Concerns\\{closure}(): Argument #1 ($component) must be of type Filament\\Forms\\Components\\Component, null given at /home/yallaxom/public_html/vendor/filament/forms/src/Concerns/HasComponents.php:122)

when you remove the line the problem will be solved

Package Version

3.0.59

PHP Version

8.2.*

Laravel Version

11

Which operating systems does with happen with?

No response

Notes

No response

[Bug]: /bolt routing missing

What happened?

Unable to view forms or view all forms. Routes for /bolt seem to be missing.

How to reproduce the bug

I am running a fresh install of Laravel Jetstream, Filament, and then Bolt. I corrected the issue awaiting pr from the guava/filament-icon-picker, then proceeded to create a form and view it. Application returns an error of:

Call to a member function getPlugin() on null

Package Version

2.1.29

PHP Version

8.2.4

Laravel Version

10.37.3

Which operating systems does with happen with?

Windows

Notes

No response

Conditional Visibility depending on a toggle field

Is your feature request related to a problem? Please describe.
Conditional Visibility depending on a toggle field to avoid checkboxes or select

Describe the solution you'd like
A toogle field for a question like: Do you like music? Could make a text field Which kind of music?visible.

Describe alternatives you've considered
Using checkboxes or select, it works but it will be a nice to have.

Additional context
Thanks for this package! ๐Ÿ‘

Repeater field type

Is your feature request related to a problem? Please describe.
We are looking to build forms where you can have multiple participants, each with a name, email and other user defined fields. Currently I can't see a way to achieve this.

Describe the solution you'd like
I would like to be able to use the Repeater field from core (with min/max options etc) to allow me to add multiple participants to my form submission.

Describe alternatives you've considered
An alternative would be to allow sections to be multi-filled, again with min and max options.

Filament Resource form FormStatus model

Is your feature request related to a problem? Please describe.
Form entries have only two static statues "new and closed", I need to add more statuses in addition to "new" and "closed". For example, I have Job Application Form created by bolt, so I need more status for the entries like: approved, not qualified and rejected.

I need to be able to manage and control all status.

I know that you use calebporzio/sushi.

If you have any solution on how to add more statuses for FormStatus model, please tell me.

Describe the solution you'd like
I suggest to have a filament resource (list, create, edit and delete) for manage statues of bolt

Error view Form

I had a problem creating the form, but then checking the repository I found that I had to create the compact column, this already works, after creating the form when I click on the form, where the metrics are, I get this error.

could not find driver
https://flareapp.io/share/KPgW4YZP

I would appreciate if there is a place where you can help me with this error, I have a lot of problems installing the bolt module as it is in the demo.

[Bug]: Files in 'file upload' field does not work

What happened?

When the 'file upload' input was used in any form, the file was not uploaded to the 's3' driver, for example. When we checked the response, the file was not available.

How to reproduce the bug

use the file upload field ina form and try to upload and try to see the file attached.

Package Version

^3

PHP Version

8.2.7

Laravel Version

^10.10

Which operating systems does with happen with?

Linux

Notes

No response

[Bug]: Performance Issue After Installing Bolt Package

What happened?

After installing and integrating the Bolt package into our project and deploying it to the production environment, I noticed a significant decrease in system performance.

How to reproduce the bug

Investigation:
After three days of thorough investigation, I discovered that the performance decline coincided with the installation of the Bolt package.

Testing:
I conducted extensive tests, even on a clean project, where I solely installed the package without adding any additional code. I meticulously debugged the code line by line and benchmarked the system.

Observations:
I observed that inserting the return true statement step by step in index.php, particularly after require __DIR__.'/../vendor/autoload.php';, significantly reduced system responsiveness. Furthermore, the issue intensified after $kernel = $app->make(Kernel::class);, indicating a failure to reach the original code.

Attached Benchmark:
I've included an example benchmark, captured before and after the Bolt package installation on my local setup using Sail and PHP_CLI_SERVER_WORKERS=10 in .env

Before install Bolt Package:
image

After installation Bolt Package:
image


Request for Assistance:
Despite extensive investigation, I'm unable to pinpoint the root cause of this issue. Any advice or insights would be greatly appreciated.

Thank you in advance for your assistance.

Package Version

3.0.38

PHP Version

8.2.10

Laravel Version

11.6.0

Which operating systems does with happen with?

Linux

Notes

No response

Route [blog] not defined when viewing a form.

i have installed the bolt package to use the form builder. i can create form, however when i click on view it shows this error.

Route [blogs] not defined.

is there any additional steps that i have to do after installing/ configuring the package?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.