sprinkles-js 0.1.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/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright 2025 Tree company <development@treecompany.be>
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
6
+ this software and associated documentation files (the "Software"), to deal in
7
+ the Software without restriction, including without limitation the rights to
8
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
9
+ the Software, and to permit persons to whom the Software is furnished to do so,
10
+ subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
17
+ FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18
+ COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19
+ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,63 @@
1
+ # Sprinkles
2
+
3
+ Sprinkles is a small library to add small amounts of javascript to your html.
4
+
5
+ We try to simplify working with custom elements by:
6
+ * Reducing the amount of boilerplate you have to write to add and remove event listeners
7
+ * Providing a convention for referencing nodes within your element
8
+
9
+ This approach takes inspiration from AlpineJS and Stimulus, but is fully build around custom elements.
10
+
11
+ ## Using the library
12
+ ### Build your own elements
13
+
14
+ You can easily build your own custom element on top of `SprinklesElement`. A simple hello world:
15
+ ```js
16
+ import { SprinklesElement } from "sprinkles-js";
17
+
18
+ class HelloWorldElement extends SprinklesElement {
19
+ static tagName = "hello-world";
20
+ static events = {
21
+ click: "greet"
22
+ }
23
+
24
+ greet(event) {
25
+ console.log("Got click event: ", event);
26
+ alert("Hello world!")
27
+ }
28
+ }
29
+
30
+ HelloWorldElement.register();
31
+
32
+ ```
33
+ ```html
34
+ <hello-world></hello-world>
35
+ ```
36
+
37
+ ### Included components
38
+
39
+ In addition to the abstract sprinkles element, we also include some basic elements that you can use.
40
+
41
+ #### ClickableCard
42
+ A card that can be clicked anywhere to follow the link inside it:
43
+ ```js
44
+ import { ClickableCard } from "sprinkles-js";
45
+
46
+ ClickableCard.register();
47
+ ```
48
+
49
+ ```html
50
+ <clickable-card>
51
+ <p>Some text</p>
52
+ </p>
53
+
54
+ <a href="https://example.com" data-clickable-card-ref="link">A link</a>
55
+
56
+ <button>A button that doesn't trigger</button>
57
+ </clickable-card>
58
+ ```
59
+
60
+
61
+ This library was extracted from various projects at Tree company.
62
+
63
+ ![Tree company](./logo_tree.png)
package/dist/index.js ADDED
@@ -0,0 +1,98 @@
1
+ var k = Object.defineProperty;
2
+ var f = (r) => {
3
+ throw TypeError(r);
4
+ };
5
+ var v = (r, t, e) => t in r ? k(r, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : r[t] = e;
6
+ var s = (r, t, e) => v(r, typeof t != "symbol" ? t + "" : t, e), E = (r, t, e) => t.has(r) || f("Cannot " + e);
7
+ var d = (r, t, e) => t.has(r) ? f("Cannot add the same private member more than once") : t instanceof WeakSet ? t.add(r) : t.set(r, e);
8
+ var i = (r, t, e) => (E(r, t, "access private method"), e);
9
+ var o, m, u, b, h;
10
+ class n extends HTMLElement {
11
+ constructor() {
12
+ super(...arguments);
13
+ d(this, o);
14
+ /**
15
+ * The found refs, based on the class field `refs`
16
+ *
17
+ * @type { [name: string]: Element | null}
18
+ */
19
+ s(this, "refs", {});
20
+ }
21
+ static register(e = this.tagName, c) {
22
+ "customElements" in window && (c || customElements).define(e, this);
23
+ }
24
+ connectedCallback() {
25
+ i(this, o, m).call(this), i(this, o, u).call(this), this.afterConnected();
26
+ }
27
+ disconnectedCallback() {
28
+ this.beforeDisconnect(), i(this, o, b).call(this);
29
+ }
30
+ // Callbacks
31
+ afterConnected() {
32
+ }
33
+ beforeDisconnect() {
34
+ }
35
+ }
36
+ o = new WeakSet(), // Setup
37
+ m = function() {
38
+ this.refs = {}, this.constructor.refs.forEach((e) => {
39
+ this.refs[e] = this.querySelector(
40
+ `[data-${this.constructor.tagName}-ref=${e}]`
41
+ );
42
+ });
43
+ }, u = function() {
44
+ Object.entries(this.constructor.events).forEach(([e, c]) => {
45
+ i(this, o, h).call(this, c).forEach((a) => {
46
+ a.element && (a.element.addEventListener(
47
+ e,
48
+ a.callback,
49
+ a.options
50
+ ), a.immediate && a.callback.call());
51
+ });
52
+ });
53
+ }, b = function() {
54
+ Object.entries(this.constructor.events).forEach(([e, c]) => {
55
+ i(this, o, h).call(this, c).forEach((a) => {
56
+ a.element && a.element.removeEventListener(
57
+ e,
58
+ a.callback,
59
+ a.options
60
+ );
61
+ });
62
+ });
63
+ }, h = function(e) {
64
+ return e = Array.isArray(e) ? e : [e], e.map((c) => (c = typeof c == "string" ? { method: c } : { ...c }, c.element || (c.element = c.ref ? this.refs[c.ref] : this), c.immediate || (c.immediate = !1), c.callback = this[c.method].bind(this), c));
65
+ }, /**
66
+ * The default tagName that will be used to register this elements
67
+ */
68
+ s(n, "tagName", "sprinkles-element"), /**
69
+ * An array of elements that will be referenced in the elements
70
+ *
71
+ * These refs are expected to match DOM-nodes following the pattern
72
+ * `[data-TAG-NAME-ref="refName"]`
73
+ *
74
+ * @type {string[]}
75
+ */
76
+ s(n, "refs", []), /**
77
+ * An object with events that should be observed.
78
+ *
79
+ * For each event a listener will be added when the elements connects (and removed when it disconnects)
80
+ *
81
+ * @type {{ [eventName: string]: string | { method: string; ref?: string, options?: boolean | AddEventListenerOptions; immediate?: boolean } | string[] | { method: string; ref?: string, options?: boolean | AddEventListenerOptions; immediate?: boolean }[] }}
82
+ */
83
+ s(n, "events", {});
84
+ class l extends n {
85
+ handleClick(t) {
86
+ if (t.target.closest(`${this.constructor.tagName} :is(a,button)`))
87
+ return;
88
+ !window.getSelection().toString() && this.refs.link.click();
89
+ }
90
+ }
91
+ s(l, "tagName", "clickable-card"), s(l, "refs", ["link"]), s(l, "events", {
92
+ click: "handleClick"
93
+ });
94
+ export {
95
+ l as ClickableCardElement,
96
+ n as SprinklesElement
97
+ };
98
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../src/elements/sprinkles_element.js","../src/elements/clickable_card_element.js"],"sourcesContent":["/**\n * SprinklesElement is an abstract class to help us build custom elements\n *\n * By defining refs and events the element will automatically run some setup when connected.\n */\nexport default class SprinklesElement extends HTMLElement {\n /**\n * The default tagName that will be used to register this elements\n */\n static tagName = \"sprinkles-element\";\n\n /**\n * An array of elements that will be referenced in the elements\n *\n * These refs are expected to match DOM-nodes following the pattern\n * `[data-TAG-NAME-ref=\"refName\"]`\n *\n * @type {string[]}\n */\n static refs = [];\n\n /**\n * An object with events that should be observed.\n *\n * For each event a listener will be added when the elements connects (and removed when it disconnects)\n *\n * @type {{ [eventName: string]: string | { method: string; ref?: string, options?: boolean | AddEventListenerOptions; immediate?: boolean } | string[] | { method: string; ref?: string, options?: boolean | AddEventListenerOptions; immediate?: boolean }[] }}\n */\n static events = {};\n\n static register(tagName = this.tagName, registry) {\n if (\"customElements\" in window) {\n (registry || customElements).define(tagName, this);\n }\n }\n\n /**\n * The found refs, based on the class field `refs`\n *\n * @type { [name: string]: Element | null}\n */\n refs = {};\n\n connectedCallback() {\n this.#detectRefs();\n this.#bindEvents();\n this.afterConnected();\n }\n\n disconnectedCallback() {\n this.beforeDisconnect();\n this.#unbindEvents();\n }\n\n // Callbacks\n afterConnected() {}\n\n beforeDisconnect() {}\n\n // Setup\n #detectRefs() {\n this.refs = {};\n this.constructor.refs.forEach((refName) => {\n this.refs[refName] = this.querySelector(\n `[data-${this.constructor.tagName}-ref=${refName}]`,\n );\n });\n }\n\n #bindEvents() {\n Object.entries(this.constructor.events).forEach(([eventName, settings]) => {\n this.#normalizeEventSettings(settings).forEach((setting) => {\n // If we don't have an element, we simply return (this can happen when a ref could not be found)\n if (!setting.element) return;\n\n setting.element.addEventListener(\n eventName,\n setting.callback,\n setting.options,\n );\n if (setting.immediate) setting.callback.call();\n });\n });\n }\n\n #unbindEvents() {\n Object.entries(this.constructor.events).forEach(([eventName, settings]) => {\n this.#normalizeEventSettings(settings).forEach((setting) => {\n if (!setting.element) return;\n\n setting.element.removeEventListener(\n eventName,\n setting.callback,\n setting.options,\n );\n });\n });\n }\n\n #normalizeEventSettings(settings) {\n // Settings can be passed as an object or an array of objects, we always normalize this to an array\n settings = Array.isArray(settings) ? settings : [settings];\n return settings.map((setting) => {\n // We always clone settings, so we don't modify the value that is stored as a class field\n // Otherwise setting `element` will mess with other instances of the same element\n setting =\n typeof setting === \"string\" ? { method: setting } : { ...setting };\n setting.element ||= setting[\"ref\"] ? this.refs[setting[\"ref\"]] : this;\n setting.immediate ||= false;\n setting.callback = this[setting.method].bind(this);\n return setting;\n });\n }\n}\n","import SprinklesElement from \"./sprinkles_element\";\n\n/**\n * A card that can be clicked anywhere to follow a link inside it\n *\n * This ensures that a screen reader does not to read the whole card to announce the link, while a user can still click anywhere in the card.\n * You can include other links and buttons in the card, these will not trigger a navigation.\n *\n * This is based on the recipe and discussion from Web Accessibility Cookbook by Manuel Matuzović (O’Reilly). Copyright 2024 Manuel Matuzović, 978-1-098-14560-6.\n * and this article from Vikas Parashar: https://css-tricks.com/block-links-the-search-for-a-perfect-solution/#aa-method-4-sprinkle-javascript-on-the-second-method\n */\nexport default class ClickableCardElement extends SprinklesElement {\n static tagName = \"clickable-card\";\n static refs = [\"link\"];\n static events = {\n click: \"handleClick\",\n };\n\n handleClick(event) {\n // Don't handle clicks on buttons or anchors\n if (event.target.closest(`${this.constructor.tagName} :is(a,button)`)) {\n return;\n }\n\n // Check if text is selected and don't click if so\n const noTextSelected = !window.getSelection().toString();\n if (noTextSelected) this.refs.link.click();\n }\n}\n"],"names":["_SprinklesElement_instances","detectRefs_fn","bindEvents_fn","unbindEvents_fn","normalizeEventSettings_fn","SprinklesElement","__privateAdd","__publicField","tagName","registry","__privateMethod","refName","eventName","settings","setting","ClickableCardElement","event"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ (function(t,e){typeof exports=="object"&&typeof module<"u"?e(exports):typeof define=="function"&&define.amd?define(["exports"],e):(t=typeof globalThis<"u"?globalThis:t||self,e(t["sprinkles-js"]={}))})(this,function(t){"use strict";var p=Object.defineProperty;var d=t=>{throw TypeError(t)};var v=(t,e,r)=>e in t?p(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var a=(t,e,r)=>v(t,typeof e!="symbol"?e+"":e,r),E=(t,e,r)=>e.has(t)||d("Cannot "+r);var h=(t,e,r)=>e.has(t)?d("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(t):e.set(t,r);var n=(t,e,r)=>(E(t,e,"access private method"),r);var i,m,u,b,l;class e extends HTMLElement{constructor(){super(...arguments);h(this,i);a(this,"refs",{})}static register(o=this.tagName,c){"customElements"in window&&(c||customElements).define(o,this)}connectedCallback(){n(this,i,m).call(this),n(this,i,u).call(this),this.afterConnected()}disconnectedCallback(){this.beforeDisconnect(),n(this,i,b).call(this)}afterConnected(){}beforeDisconnect(){}}i=new WeakSet,m=function(){this.refs={},this.constructor.refs.forEach(o=>{this.refs[o]=this.querySelector(`[data-${this.constructor.tagName}-ref=${o}]`)})},u=function(){Object.entries(this.constructor.events).forEach(([o,c])=>{n(this,i,l).call(this,c).forEach(s=>{s.element&&(s.element.addEventListener(o,s.callback,s.options),s.immediate&&s.callback.call())})})},b=function(){Object.entries(this.constructor.events).forEach(([o,c])=>{n(this,i,l).call(this,c).forEach(s=>{s.element&&s.element.removeEventListener(o,s.callback,s.options)})})},l=function(o){return o=Array.isArray(o)?o:[o],o.map(c=>(c=typeof c=="string"?{method:c}:{...c},c.element||(c.element=c.ref?this.refs[c.ref]:this),c.immediate||(c.immediate=!1),c.callback=this[c.method].bind(this),c))},a(e,"tagName","sprinkles-element"),a(e,"refs",[]),a(e,"events",{});class r extends e{handleClick(f){if(f.target.closest(`${this.constructor.tagName} :is(a,button)`))return;!window.getSelection().toString()&&this.refs.link.click()}}a(r,"tagName","clickable-card"),a(r,"refs",["link"]),a(r,"events",{click:"handleClick"}),t.ClickableCardElement=r,t.SprinklesElement=e,Object.defineProperty(t,Symbol.toStringTag,{value:"Module"})});
2
+ //# sourceMappingURL=index.umd.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.umd.cjs","sources":["../src/elements/sprinkles_element.js","../src/elements/clickable_card_element.js"],"sourcesContent":["/**\n * SprinklesElement is an abstract class to help us build custom elements\n *\n * By defining refs and events the element will automatically run some setup when connected.\n */\nexport default class SprinklesElement extends HTMLElement {\n /**\n * The default tagName that will be used to register this elements\n */\n static tagName = \"sprinkles-element\";\n\n /**\n * An array of elements that will be referenced in the elements\n *\n * These refs are expected to match DOM-nodes following the pattern\n * `[data-TAG-NAME-ref=\"refName\"]`\n *\n * @type {string[]}\n */\n static refs = [];\n\n /**\n * An object with events that should be observed.\n *\n * For each event a listener will be added when the elements connects (and removed when it disconnects)\n *\n * @type {{ [eventName: string]: string | { method: string; ref?: string, options?: boolean | AddEventListenerOptions; immediate?: boolean } | string[] | { method: string; ref?: string, options?: boolean | AddEventListenerOptions; immediate?: boolean }[] }}\n */\n static events = {};\n\n static register(tagName = this.tagName, registry) {\n if (\"customElements\" in window) {\n (registry || customElements).define(tagName, this);\n }\n }\n\n /**\n * The found refs, based on the class field `refs`\n *\n * @type { [name: string]: Element | null}\n */\n refs = {};\n\n connectedCallback() {\n this.#detectRefs();\n this.#bindEvents();\n this.afterConnected();\n }\n\n disconnectedCallback() {\n this.beforeDisconnect();\n this.#unbindEvents();\n }\n\n // Callbacks\n afterConnected() {}\n\n beforeDisconnect() {}\n\n // Setup\n #detectRefs() {\n this.refs = {};\n this.constructor.refs.forEach((refName) => {\n this.refs[refName] = this.querySelector(\n `[data-${this.constructor.tagName}-ref=${refName}]`,\n );\n });\n }\n\n #bindEvents() {\n Object.entries(this.constructor.events).forEach(([eventName, settings]) => {\n this.#normalizeEventSettings(settings).forEach((setting) => {\n // If we don't have an element, we simply return (this can happen when a ref could not be found)\n if (!setting.element) return;\n\n setting.element.addEventListener(\n eventName,\n setting.callback,\n setting.options,\n );\n if (setting.immediate) setting.callback.call();\n });\n });\n }\n\n #unbindEvents() {\n Object.entries(this.constructor.events).forEach(([eventName, settings]) => {\n this.#normalizeEventSettings(settings).forEach((setting) => {\n if (!setting.element) return;\n\n setting.element.removeEventListener(\n eventName,\n setting.callback,\n setting.options,\n );\n });\n });\n }\n\n #normalizeEventSettings(settings) {\n // Settings can be passed as an object or an array of objects, we always normalize this to an array\n settings = Array.isArray(settings) ? settings : [settings];\n return settings.map((setting) => {\n // We always clone settings, so we don't modify the value that is stored as a class field\n // Otherwise setting `element` will mess with other instances of the same element\n setting =\n typeof setting === \"string\" ? { method: setting } : { ...setting };\n setting.element ||= setting[\"ref\"] ? this.refs[setting[\"ref\"]] : this;\n setting.immediate ||= false;\n setting.callback = this[setting.method].bind(this);\n return setting;\n });\n }\n}\n","import SprinklesElement from \"./sprinkles_element\";\n\n/**\n * A card that can be clicked anywhere to follow a link inside it\n *\n * This ensures that a screen reader does not to read the whole card to announce the link, while a user can still click anywhere in the card.\n * You can include other links and buttons in the card, these will not trigger a navigation.\n *\n * This is based on the recipe and discussion from Web Accessibility Cookbook by Manuel Matuzović (O’Reilly). Copyright 2024 Manuel Matuzović, 978-1-098-14560-6.\n * and this article from Vikas Parashar: https://css-tricks.com/block-links-the-search-for-a-perfect-solution/#aa-method-4-sprinkle-javascript-on-the-second-method\n */\nexport default class ClickableCardElement extends SprinklesElement {\n static tagName = \"clickable-card\";\n static refs = [\"link\"];\n static events = {\n click: \"handleClick\",\n };\n\n handleClick(event) {\n // Don't handle clicks on buttons or anchors\n if (event.target.closest(`${this.constructor.tagName} :is(a,button)`)) {\n return;\n }\n\n // Check if text is selected and don't click if so\n const noTextSelected = !window.getSelection().toString();\n if (noTextSelected) this.refs.link.click();\n }\n}\n"],"names":["SprinklesElement","__privateAdd","_SprinklesElement_instances","__publicField","tagName","registry","__privateMethod","detectRefs_fn","bindEvents_fn","unbindEvents_fn","refName","eventName","settings","normalizeEventSettings_fn","setting","ClickableCardElement","event"],"mappings":"qoBAKe,MAAMA,UAAyB,WAAY,CAA3C,kCAAAC,EAAA,KAAAC,GAoCbC,EAAA,YAAO,CAAE,GAXT,OAAO,SAASC,EAAU,KAAK,QAASC,EAAU,CAC5C,mBAAoB,SACrBA,GAAY,gBAAgB,OAAOD,EAAS,IAAI,CAEvD,CASE,mBAAoB,CAClBE,EAAA,KAAKJ,EAAAK,GAAL,WACAD,EAAA,KAAKJ,EAAAM,GAAL,WACA,KAAK,eAAgB,CACzB,CAEE,sBAAuB,CACrB,KAAK,iBAAkB,EACvBF,EAAA,KAAKJ,EAAAO,GAAL,UACJ,CAGE,gBAAiB,CAAA,CAEjB,kBAAmB,CAAA,CAwDrB,CA5GeP,EAAA,YAuDbK,EAAW,UAAG,CACZ,KAAK,KAAO,CAAE,EACd,KAAK,YAAY,KAAK,QAASG,GAAY,CACzC,KAAK,KAAKA,CAAO,EAAI,KAAK,cACxB,SAAS,KAAK,YAAY,OAAO,QAAQA,CAAO,GACjD,CACP,CAAK,CACL,EAEEF,EAAW,UAAG,CACZ,OAAO,QAAQ,KAAK,YAAY,MAAM,EAAE,QAAQ,CAAC,CAACG,EAAWC,CAAQ,IAAM,CACzEN,EAAA,KAAKJ,EAAAW,GAAL,UAA6BD,GAAU,QAASE,GAAY,CAErDA,EAAQ,UAEbA,EAAQ,QAAQ,iBACdH,EACAG,EAAQ,SACRA,EAAQ,OACT,EACGA,EAAQ,WAAWA,EAAQ,SAAS,KAAM,EACtD,CAAO,CACP,CAAK,CACL,EAEEL,EAAa,UAAG,CACd,OAAO,QAAQ,KAAK,YAAY,MAAM,EAAE,QAAQ,CAAC,CAACE,EAAWC,CAAQ,IAAM,CACzEN,EAAA,KAAKJ,EAAAW,GAAL,UAA6BD,GAAU,QAASE,GAAY,CACrDA,EAAQ,SAEbA,EAAQ,QAAQ,oBACdH,EACAG,EAAQ,SACRA,EAAQ,OACT,CACT,CAAO,CACP,CAAK,CACL,EAEED,EAAuB,SAACD,EAAU,CAEhC,OAAAA,EAAW,MAAM,QAAQA,CAAQ,EAAIA,EAAW,CAACA,CAAQ,EAClDA,EAAS,IAAKE,IAGnBA,EACE,OAAOA,GAAY,SAAW,CAAE,OAAQA,CAAS,EAAG,CAAE,GAAGA,CAAS,EACpEA,EAAQ,UAARA,EAAQ,QAAYA,EAAQ,IAAS,KAAK,KAAKA,EAAQ,GAAM,EAAI,MACjEA,EAAQ,YAARA,EAAQ,UAAc,IACtBA,EAAQ,SAAW,KAAKA,EAAQ,MAAM,EAAE,KAAK,IAAI,EAC1CA,EACR,CACL,EAvGEX,EAJmBH,EAIZ,UAAU,qBAUjBG,EAdmBH,EAcZ,OAAO,CAAE,GAShBG,EAvBmBH,EAuBZ,SAAS,CAAE,GCjBL,MAAMe,UAA6Bf,CAAiB,CAOjE,YAAYgB,EAAO,CAEjB,GAAIA,EAAM,OAAO,QAAQ,GAAG,KAAK,YAAY,OAAO,gBAAgB,EAClE,OAIqB,CAAC,OAAO,aAAY,EAAG,SAAU,GACpC,KAAK,KAAK,KAAK,MAAO,CAC9C,CACA,CAhBEb,EADmBY,EACZ,UAAU,kBACjBZ,EAFmBY,EAEZ,OAAO,CAAC,MAAM,GACrBZ,EAHmBY,EAGZ,SAAS,CACd,MAAO,aACR"}
package/package.json ADDED
@@ -0,0 +1,38 @@
1
+ {
2
+ "name": "sprinkles-js",
3
+ "version": "0.1.0",
4
+ "main": "index.js",
5
+ "repository": "https://github.com/tree-company/sprinkles-js",
6
+ "author": "Tree company <development@treecompany.be>",
7
+ "contributors": [
8
+ "Robbe Van Petegem <git@robbevp.be>",
9
+ "whilderson <wouter.hilderson@gmail.com>"
10
+ ],
11
+ "license": "MIT",
12
+ "type": "module",
13
+ "scripts": {
14
+ "dev": "vite",
15
+ "build": "vite build",
16
+ "lint": "eslint .",
17
+ "lint:fix": "eslint . --fix",
18
+ "test": "vitest"
19
+ },
20
+ "files": [
21
+ "dist/**/*"
22
+ ],
23
+ "exports": {
24
+ "import": "./dist/index.js",
25
+ "require": "./dist/index.umd.js",
26
+ "default": "./dist/index.js"
27
+ },
28
+ "dependencies": {},
29
+ "devDependencies": {
30
+ "@tree-company/eslint-config": "^0.4.3",
31
+ "@tree-company/stylelint-config": "^0.4.3",
32
+ "eslint": "^9.22.0",
33
+ "playwright": "^1.51.1",
34
+ "prettier": "^3.5.3",
35
+ "stylelint": "^16.16.0",
36
+ "vite": "^6.2.3"
37
+ }
38
+ }