diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..d132382 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,16 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +insert_final_newline = true +max_line_length = 100 +trim_trailing_whitespace = true + +[*.py] +indent_size = 4 +max_line_length = 88 + +[*.sh] +indent_size = 4 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..3953d18 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,52 @@ +name: Run CI build + +on: + push: + branches: + - main + tags: + - '*' + pull_request: + workflow_dispatch: + +jobs: + prettier: + name: Check frontend code formatting with prettier + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version-file: '.nvmrc' + + - name: Install dependencies + run: npm ci + + - name: Run prettier linter + run: npm run checkformat + + package-build: + name: Build NPM package dist + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version-file: '.nvmrc' + registry-url: 'https://registry.npmjs.org' + + - name: Build artifacts + run: | + npm ci + npm run build + + - name: Check for nesting level errors + run: ./bin/check_token_nesting.py + + - name: Publish package to NPM + if: startsWith(github.ref, 'refs/tags/') + run: npm publish + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5eaa9bb --- /dev/null +++ b/.gitignore @@ -0,0 +1,107 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# TypeScript v1 declaration files +typings/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env +.env.test + +# parcel-bundler cache (https://parceljs.org/) +.cache + +# Next.js build output +.next + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and *not* Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# IDE files +.idea/ diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 0000000..b6a7d89 --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +16 diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 0000000..81691d6 --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,15 @@ +{ + "$schema": "http://json.schemastore.org/prettierrc", + "arrowParens": "avoid", + "bracketSpacing": false, + "bracketSameLine": false, + "jsxSingleQuote": false, + "printWidth": 100, + "proseWrap": "always", + "quoteProps": "as-needed", + "semi": true, + "singleQuote": true, + "tabWidth": 2, + "trailingComma": "es5", + "useTabs": false +} diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..999ba10 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,308 @@ +# Licence + +Copyright © Dimpact, 2022 + +Licensed under the EUPL + +**Table of Contents** + +- [Licence](#licence) + - [EUPL text in English](#eupl-text-in-english) + - [EUPL text in Dutch](#eupl-text-in-dutch) + +## EUPL text in English + +``` +EUROPEAN UNION PUBLIC LICENCE v. 1.2 +EUPL © the European Union 2007, 2016 + +This European Union Public Licence (the ‘EUPL’) applies to the Work (as defined below) which is provided under the +terms of this Licence. Any use of the Work, other than as authorised under this Licence is prohibited (to the extent such +use is covered by a right of the copyright holder of the Work). +The Work is provided under the terms of this Licence when the Licensor (as defined below) has placed the following +notice immediately following the copyright notice for the Work: + Licensed under the EUPL +or has expressed by any other means his willingness to license under the EUPL. + +1.Definitions +In this Licence, the following terms have the following meaning: +— ‘The Licence’:this Licence. +— ‘The Original Work’:the work or software distributed or communicated by the Licensor under this Licence, available +as Source Code and also as Executable Code as the case may be. +— ‘Derivative Works’:the works or software that could be created by the Licensee, based upon the Original Work or +modifications thereof. This Licence does not define the extent of modification or dependence on the Original Work +required in order to classify a work as a Derivative Work; this extent is determined by copyright law applicable in +the country mentioned in Article 15. +— ‘The Work’:the Original Work or its Derivative Works. +— ‘The Source Code’:the human-readable form of the Work which is the most convenient for people to study and +modify. +— ‘The Executable Code’:any code which has generally been compiled and which is meant to be interpreted by +a computer as a program. +— ‘The Licensor’:the natural or legal person that distributes or communicates the Work under the Licence. +— ‘Contributor(s)’:any natural or legal person who modifies the Work under the Licence, or otherwise contributes to +the creation of a Derivative Work. +— ‘The Licensee’ or ‘You’:any natural or legal person who makes any usage of the Work under the terms of the +Licence. +— ‘Distribution’ or ‘Communication’:any act of selling, giving, lending, renting, distributing, communicating, +transmitting, or otherwise making available, online or offline, copies of the Work or providing access to its essential +functionalities at the disposal of any other natural or legal person. + +2.Scope of the rights granted by the Licence +The Licensor hereby grants You a worldwide, royalty-free, non-exclusive, sublicensable licence to do the following, for +the duration of copyright vested in the Original Work: +— use the Work in any circumstance and for all usage, +— reproduce the Work, +— modify the Work, and make Derivative Works based upon the Work, +— communicate to the public, including the right to make available or display the Work or copies thereof to the public +and perform publicly, as the case may be, the Work, +— distribute the Work or copies thereof, +— lend and rent the Work or copies thereof, +— sublicense rights in the Work or copies thereof. +Those rights can be exercised on any media, supports and formats, whether now known or later invented, as far as the +applicable law permits so. +In the countries where moral rights apply, the Licensor waives his right to exercise his moral right to the extent allowed +by law in order to make effective the licence of the economic rights here above listed. +The Licensor grants to the Licensee royalty-free, non-exclusive usage rights to any patents held by the Licensor, to the +extent necessary to make use of the rights granted on the Work under this Licence. + +3.Communication of the Source Code +The Licensor may provide the Work either in its Source Code form, or as Executable Code. If the Work is provided as +Executable Code, the Licensor provides in addition a machine-readable copy of the Source Code of the Work along with +each copy of the Work that the Licensor distributes or indicates, in a notice following the copyright notice attached to +the Work, a repository where the Source Code is easily and freely accessible for as long as the Licensor continues to +distribute or communicate the Work. + +4.Limitations on copyright +Nothing in this Licence is intended to deprive the Licensee of the benefits from any exception or limitation to the +exclusive rights of the rights owners in the Work, of the exhaustion of those rights or of other applicable limitations +thereto. + +5.Obligations of the Licensee +The grant of the rights mentioned above is subject to some restrictions and obligations imposed on the Licensee. Those +obligations are the following: + +Attribution right: The Licensee shall keep intact all copyright, patent or trademarks notices and all notices that refer to +the Licence and to the disclaimer of warranties. The Licensee must include a copy of such notices and a copy of the +Licence with every copy of the Work he/she distributes or communicates. The Licensee must cause any Derivative Work +to carry prominent notices stating that the Work has been modified and the date of modification. + +Copyleft clause: If the Licensee distributes or communicates copies of the Original Works or Derivative Works, this +Distribution or Communication will be done under the terms of this Licence or of a later version of this Licence unless +the Original Work is expressly distributed only under this version of the Licence — for example by communicating +‘EUPL v. 1.2 only’. The Licensee (becoming Licensor) cannot offer or impose any additional terms or conditions on the +Work or Derivative Work that alter or restrict the terms of the Licence. + +Compatibility clause: If the Licensee Distributes or Communicates Derivative Works or copies thereof based upon both +the Work and another work licensed under a Compatible Licence, this Distribution or Communication can be done +under the terms of this Compatible Licence. For the sake of this clause, ‘Compatible Licence’ refers to the licences listed +in the appendix attached to this Licence. Should the Licensee's obligations under the Compatible Licence conflict with +his/her obligations under this Licence, the obligations of the Compatible Licence shall prevail. + +Provision of Source Code: When distributing or communicating copies of the Work, the Licensee will provide +a machine-readable copy of the Source Code or indicate a repository where this Source will be easily and freely available +for as long as the Licensee continues to distribute or communicate the Work. +Legal Protection: This Licence does not grant permission to use the trade names, trademarks, service marks, or names +of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and +reproducing the content of the copyright notice. + +6.Chain of Authorship +The original Licensor warrants that the copyright in the Original Work granted hereunder is owned by him/her or +licensed to him/her and that he/she has the power and authority to grant the Licence. +Each Contributor warrants that the copyright in the modifications he/she brings to the Work are owned by him/her or +licensed to him/her and that he/she has the power and authority to grant the Licence. +Each time You accept the Licence, the original Licensor and subsequent Contributors grant You a licence to their contributions +to the Work, under the terms of this Licence. + +7.Disclaimer of Warranty +The Work is a work in progress, which is continuously improved by numerous Contributors. It is not a finished work +and may therefore contain defects or ‘bugs’ inherent to this type of development. +For the above reason, the Work is provided under the Licence on an ‘as is’ basis and without warranties of any kind +concerning the Work, including without limitation merchantability, fitness for a particular purpose, absence of defects or +errors, accuracy, non-infringement of intellectual property rights other than copyright as stated in Article 6 of this +Licence. +This disclaimer of warranty is an essential part of the Licence and a condition for the grant of any rights to the Work. + +8.Disclaimer of Liability +Except in the cases of wilful misconduct or damages directly caused to natural persons, the Licensor will in no event be +liable for any direct or indirect, material or moral, damages of any kind, arising out of the Licence or of the use of the +Work, including without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, loss +of data or any commercial damage, even if the Licensor has been advised of the possibility of such damage. However, +the Licensor will be liable under statutory product liability laws as far such laws apply to the Work. + +9.Additional agreements +While distributing the Work, You may choose to conclude an additional agreement, defining obligations or services +consistent with this Licence. However, if accepting obligations, You may act only on your own behalf and on your sole +responsibility, not on behalf of the original Licensor or any other Contributor, and only if You agree to indemnify, +defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against such Contributor by +the fact You have accepted any warranty or additional liability. + +10.Acceptance of the Licence +The provisions of this Licence can be accepted by clicking on an icon ‘I agree’ placed under the bottom of a window +displaying the text of this Licence or by affirming consent in any other similar way, in accordance with the rules of +applicable law. Clicking on that icon indicates your clear and irrevocable acceptance of this Licence and all of its terms +and conditions. +Similarly, you irrevocably accept this Licence and all of its terms and conditions by exercising any rights granted to You +by Article 2 of this Licence, such as the use of the Work, the creation by You of a Derivative Work or the Distribution +or Communication by You of the Work or copies thereof. + +11.Information to the public +In case of any Distribution or Communication of the Work by means of electronic communication by You (for example, +by offering to download the Work from a remote location) the distribution channel or media (for example, a website) +must at least provide to the public the information requested by the applicable law regarding the Licensor, the Licence +and the way it may be accessible, concluded, stored and reproduced by the Licensee. + +12.Termination of the Licence +The Licence and the rights granted hereunder will terminate automatically upon any breach by the Licensee of the terms +of the Licence. +Such a termination will not terminate the licences of any person who has received the Work from the Licensee under +the Licence, provided such persons remain in full compliance with the Licence. + +13.Miscellaneous +Without prejudice of Article 9 above, the Licence represents the complete agreement between the Parties as to the +Work. +If any provision of the Licence is invalid or unenforceable under applicable law, this will not affect the validity or +enforceability of the Licence as a whole. Such provision will be construed or reformed so as necessary to make it valid +and enforceable. +The European Commission may publish other linguistic versions or new versions of this Licence or updated versions of +the Appendix, so far this is required and reasonable, without reducing the scope of the rights granted by the Licence. +New versions of the Licence will be published with a unique version number. +All linguistic versions of this Licence, approved by the European Commission, have identical value. Parties can take +advantage of the linguistic version of their choice. + +14.Jurisdiction +Without prejudice to specific agreement between parties, +— any litigation resulting from the interpretation of this License, arising between the European Union institutions, +bodies, offices or agencies, as a Licensor, and any Licensee, will be subject to the jurisdiction of the Court of Justice +of the European Union, as laid down in article 272 of the Treaty on the Functioning of the European Union, +— any litigation arising between other parties and resulting from the interpretation of this License, will be subject to +the exclusive jurisdiction of the competent court where the Licensor resides or conducts its primary business. + +15.Applicable Law +Without prejudice to specific agreement between parties, +— this Licence shall be governed by the law of the European Union Member State where the Licensor has his seat, +resides or has his registered office, +— this licence shall be governed by Belgian law if the Licensor has no seat, residence or registered office inside +a European Union Member State. + + + Appendix + +‘Compatible Licences’ according to Article 5 EUPL are: +— GNU General Public License (GPL) v. 2, v. 3 +— GNU Affero General Public License (AGPL) v. 3 +— Open Software License (OSL) v. 2.1, v. 3.0 +— Eclipse Public License (EPL) v. 1.0 +— CeCILL v. 2.0, v. 2.1 +— Mozilla Public Licence (MPL) v. 2 +— GNU Lesser General Public Licence (LGPL) v. 2.1, v. 3 +— Creative Commons Attribution-ShareAlike v. 3.0 Unported (CC BY-SA 3.0) for works other than software +— European Union Public Licence (EUPL) v. 1.1, v. 1.2 +— Québec Free and Open-Source Licence — Reciprocity (LiLiQ-R) or Strong Reciprocity (LiLiQ-R+). + +The European Commission may update this Appendix to later versions of the above licences without producing +a new version of the EUPL, as long as they provide the rights granted in Article 2 of this Licence and protect the +covered Source Code from exclusive appropriation. +All other changes or additions to this Appendix require the production of a new EUPL version. +``` + +## EUPL text in Dutch + +``` +OPENBARE LICENTIE VAN DE EUROPESE UNIE v. 1.2. +EUPL © Europese Unie 2007, 2016 +Deze openbare licentie van de Europese Unie („EUPL”) is van toepassing op het werk (zoals hieronder gedefinieerd) dat onder de voorwaarden van deze licentie wordt verstrekt. Elk gebruik van het werk dat niet door deze licentie is toegestaan, is verboden (voor zover dit gebruik valt onder een recht van de houder van het auteursrecht op het werk). Het werk wordt verstrekt onder de voorwaarden van deze licentie wanneer de licentiegever (zoals hieronder gedefinieerd), direct volgend op de kennisgeving inzake het auteursrecht op het werk, de volgende kennisgeving opneemt: + In licentie gegeven krachtens de EUPL +of op een andere wijze zijn bereidheid te kennen heeft gegeven krachtens de EUPL in licentie te geven. + +1.Definities +In deze licentie wordt verstaan onder: +— „de licentie”:de onderhavige licentie; +— „het oorspronkelijke werk”:het werk dat of de software die door de licentiegever krachtens deze licentie wordt verspreid of medegedeeld, en dat/die beschikbaar is als broncode en, in voorkomend geval, ook als uitvoerbare code; +— „bewerkingen”:de werken of software die de licentiehouder kan creëren op grond van het oorspronkelijke werk of wijzigingen ervan. In deze licentie wordt niet gedefinieerd welke mate van wijziging of afhankelijkheid van het oorspronkelijke werk vereist is om een werk als een bewerking te kunnen aanmerken; dat wordt bepaald conform het auteursrecht dat van toepassing is in de in artikel 15 bedoelde staat; +— „het werk”:het oorspronkelijke werk of de bewerkingen ervan; +— „de broncode”:de voor mensen leesbare vorm van het werk, die het gemakkelijkste door mensen kan worden bestudeerd en gewijzigd; +— „de uitvoerbare code”:elke code die over het algemeen is gecompileerd en is bedoeld om door een computer als een programma te worden uitgevoerd; +— „de licentiegever”:de natuurlijke of rechtspersoon die het werk krachtens de licentie verspreidt of mededeelt; +— „bewerker(s)”:elke natuurlijke of rechtspersoon die het werk krachtens de licentie wijzigt of op een andere wijze bijdraagt tot de totstandkoming van een bewerking; +— „de licentiehouder” of „u”:elke natuurlijke of rechtspersoon die het werk onder de voorwaarden van de licentie gebruikt; — „verspreiding” of „mededeling”:het verkopen, geven, uitlenen, verhuren, verspreiden, mededelen, doorgeven, of op een andere wijze online of offline beschikbaar stellen van kopieën van het werk of het verlenen van toegang tot de essentiële functies ervan ten behoeve van andere natuurlijke of rechtspersonen. + +2.Draagwijdte van de uit hoofde van de licentie verleende rechten +De licentiegever verleent u hierbij een wereldwijde, royaltyvrije, niet-exclusieve, voor een sublicentie in aanmerking komende licentie, om voor de duur van het aan het oorspronkelijke werk verbonden auteursrecht, het volgende te doen: +— het werk in alle omstandigheden en voor ongeacht welk doel te gebruiken; +— het werk te verveelvoudigen; +— het werk te wijzigen en op grond van het werk bewerkingen te ontwikkelen; +— het werk aan het publiek mede te delen, waaronder het recht om het werk of kopieën ervan aan het publiek ter beschikking te stellen of te vertonen, en het werk, in voorkomend geval, in het openbaar uit te voeren; +— het werk of kopieën ervan te verspreiden; +— het werk of kopieën ervan uit te lenen en te verhuren; +— de rechten op het werk of op kopieën ervan in sublicentie te geven. +Deze rechten kunnen worden uitgeoefend met gebruikmaking van alle thans bekende of nog uit te vinden media, dragers en formaten, voor zover het toepasselijke recht dit toestaat. In de landen waar immateriële rechten van toepassing zijn, doet de licentiegever afstand van zijn recht op uitoefening van zijn immateriële rechten in de mate die door het toepasselijke recht wordt toegestaan teneinde een doeltreffende uitoefening van de bovenvermelde in licentie gegeven economische rechten mogelijk te maken. De licentiegever verleent de licentiehouder een royaltyvrij, niet-exclusief gebruiksrecht op alle octrooien van de licentiegever, voor zover dit noodzakelijk is om de uit hoofde van deze licentie verleende rechten op het werk te gebruiken. + +3.Mededeling van de broncode +De licentiegever kan het werk verstrekken in zijn broncode of als uitvoerbare code. Indien het werk als uitvoerbare code wordt verstrekt, verstrekt de licentiegever bij elke door hem verspreide kopie van het werk tevens een machinaal leesbare kopie van de broncode van het werk of geeft hij in een mededeling, volgende op de bij het werk gevoegde auteursrechtelijke kennisgeving, de plaats aan waar de broncode gemakkelijk en vrij toegankelijk is, zolang de licentiegever het werk blijft verspreiden of mededelen. + +4.Beperkingen van het auteursrecht +Geen enkele bepaling in deze licentie heeft ten doel de licentiehouder het recht te ontnemen een beroep te doen op een uitzondering op of een beperking van de exclusieve rechten van de rechthebbenden op het werk, of op de uitputting van die rechten of andere toepasselijke beperkingen daarvan. + +5.Verplichtingen van de licentiehouder +De verlening van de bovenvermelde rechten is onderworpen aan een aantal aan de licentiehouder opgelegde beperkingen en verplichtingen. Het gaat om de onderstaande verplichtingen. + +Attributierecht: de licentiehouder moet alle auteurs-, octrooi- of merkenrechtelijke kennisgevingen onverlet laten alsook alle kennisgevingen die naar de licentie en de afwijzing van garanties verwijzen. De licentiehouder moet een afschrift van deze kennisgevingen en een afschrift van de licentie bij elke kopie van het werk voegen die hij verspreidt of mededeelt. De licentiehouder moet in elke bewerking duidelijk aangeven dat het werk is gewijzigd, en eveneens de datum van wijziging vermelden. + +Copyleftclausule: wanneer de licentiehouder kopieën van het oorspronkelijke werk of bewerkingen verspreidt of mededeelt, geschiedt die verspreiding of mededeling onder de voorwaarden van deze licentie of van een latere versie van deze licentie, tenzij het oorspronkelijke werk uitdrukkelijk alleen onder deze versie van de licentie wordt verspreid — bijvoorbeeld door de mededeling „alleen EUPL v. 1.2”. De licentiehouder (die licentiegever wordt) kan met betrekking tot het werk of de bewerkingen geen aanvullende bepalingen of voorwaarden opleggen of stellen die de voorwaarden van de licentie wijzigen of beperken. + +Verenigbaarheidsclausule: wanneer de licentiehouder bewerkingen of kopieën ervan verspreidt of mededeelt die zijn gebaseerd op het werk en op een ander werk dat uit hoofde van een verenigbare licentie in licentie is gegeven, kan die verspreiding of mededeling geschieden onder de voorwaarden van deze verenigbare licentie. Voor de toepassing van deze clausule wordt onder „verenigbare licentie” verstaan, de licenties die in het aanhangsel bij deze licentie zijn opgesomd. Indien de verplichtingen van de licentiehouder uit hoofde van de verenigbare licentie in strijd zijn met diens verplichtingen uit hoofde van deze licentie, hebben de verplichtingen van de verenigbare licentie voorrang. + +Verstrekking van de broncode: bij de verspreiding of mededeling van kopieën van het werk verstrekt de licentiehouder een machinaal leesbare kopie van de broncode of geeft hij aan waar deze broncode gemakkelijk en vrij toegankelijk is, zolang de licentiehouder het werk blijft verspreiden of mededelen. + +Juridische bescherming: deze licentie verleent geen toestemming om handelsnamen, handelsmerken, dienstmerken of namen van de licentiegever te gebruiken, behalve wanneer dit op grond van een redelijk en normaal gebruik noodzakelijk is om de oorsprong van het werk te beschrijven en de inhoud van de auteursrechtelijke kennisgeving te herhalen. + +6.Auteursketen +De oorspronkelijke licentiegever garandeert dat hij houder is van het hierbij verleende auteursrecht op het oorspronkelijke werk dan wel dat dit hem in licentie is gegeven en dat hij de bevoegdheid heeft de licentie te verlenen. Elke bewerker garandeert dat hij houder is van het auteursrecht op de door hem aan het werk aangebrachte wijzigingen dan wel dat dit hem in licentie is gegeven en dat hij de bevoegdheid heeft de licentie te verlenen. Telkens wanneer u de licentie aanvaardt, verlenen de oorspronkelijke licentiegever en de opeenvolgende bewerkers u een licentie op hun bijdragen aan het werk onder de voorwaarden van deze licentie. + +7.Uitsluiting van garantie +Het werk is een werk in ontwikkeling, dat voortdurend door vele bewerkers wordt verbeterd. Het is een onvoltooid werk, dat bijgevolg nog tekortkomingen of programmeerfouten („bugs”) kan vertonen, die onlosmakelijk verbonden zijn met dit soort ontwikkeling. Om die reden wordt het werk op grond van de licentie verstrekt „zoals het is” en zonder enige garantie met betrekking tot het werk te geven, met inbegrip van, maar niet beperkt tot garanties met betrekking tot de verhandelbaarheid, de geschiktheid voor een specifiek doel, de afwezigheid van tekortkomingen of fouten, de nauwkeurigheid, de eerbiediging van andere intellectuele-eigendomsrechten dan het in artikel 6 van deze licentie bedoelde auteursrecht. Deze uitsluiting van garantie is een essentieel onderdeel van de licentie en een voorwaarde voor de verlening van rechten op het werk. + +8.Uitsluiting van aansprakelijkheid +Behoudens in het geval van een opzettelijke fout of directe schade aan natuurlijke personen, is de licentiegever in geen enkel geval aansprakelijk voor ongeacht welke directe of indirecte, materiële of immateriële schade die voortvloeit uit de licentie of het gebruik van het werk, met inbegrip van, maar niet beperkt tot schade als gevolg van het verlies van goodwill, verloren werkuren, een computerdefect of computerfout, het verlies van gegevens, of enige andere commerciële schade, zelfs indien de licentiegever werd gewezen op de mogelijkheid van dergelijke schade. De licentiegever is echter aansprakelijk op grond van de wetgeving inzake productaansprakelijkheid, voor zover deze wetgeving op het werk van toepassing is. + +9.Aanvullende overeenkomsten +Bij de verspreiding van het werk kunt u ervoor kiezen een aanvullende overeenkomst te sluiten, waarin de verplichtingen of diensten overeenkomstig deze licentie worden omschreven. Indien deze verplichtingen worden aanvaard, kunt u echter alleen in eigen naam en onder eigen verantwoordelijkheid handelen, en dus niet in naam van de oorspronkelijke licentiegever of een bewerker, en kunt u voorts alleen handelen indien u ermee instemt alle bewerkers schadeloos te stellen, te verdedigen of te vrijwaren met betrekking tot de aansprakelijkheid van of vorderingen tegen deze bewerkers op grond van het feit dat u een garantie of aanvullende aansprakelijkheid hebt aanvaard. + +10.Aanvaarding van de licentie +De bepalingen van deze licentie kunnen worden aanvaard door te klikken op het pictogram „Ik ga akkoord”, dat zich bevindt onderaan het venster waarin de tekst van deze licentie is weergegeven, of door overeenkomstig de toepasselijke wetsbepalingen op een soortgelijke wijze met de licentie in te stemmen. Door op dat pictogram te klikken geeft u aan dat u deze licentie en alle voorwaarden ervan ondubbelzinnig en onherroepelijk aanvaardt. Evenzo aanvaardt u onherroepelijk deze licentie en alle voorwaarden ervan door uitoefening van de rechten die u in artikel 2 van deze licentie zijn verleend, zoals het gebruik van het werk, het creëren door u van een bewerking of de verspreiding of mededeling door u van het werk of kopieën ervan. + +11.Voorlichting van het publiek +Indien u het werk verspreidt of mededeelt door middel van elektronische communicatiemiddelen (bijvoorbeeld door voor te stellen het werk op afstand te downloaden), moet het distributiekanaal of het medium (bijvoorbeeld een website) het publiek ten minste de gegevens verschaffen die door het toepasselijke recht zijn voorgeschreven met betrekking tot de licentiegever, de licentie en de wijze waarop deze kan worden geraadpleegd, gesloten, opgeslagen en gereproduceerd door de licentiehouder. + +12.Einde van de licentie +De licentie en de uit hoofde daarvan verleende rechten eindigen automatisch bij elke inbreuk door de licentiehouder op de voorwaarden van de licentie. Dit einde beëindigt niet de licenties van personen die het werk van de licentiehouder krachtens de licentie hebben ontvangen, mits deze personen zich volledig aan de licentie houden. + +13.Overige +Onverminderd artikel 9 vormt de licentie de gehele overeenkomst tussen de partijen met betrekking tot het werk. Indien een bepaling van de licentie volgens het toepasselijke recht ongeldig is of niet uitvoerbaar is, doet dit geen afbreuk aan de geldigheid of uitvoerbaarheid van de licentie in haar geheel. Deze bepaling dient zodanig te worden uitgelegd of gewijzigd dat zij geldig en uitvoerbaar wordt. De Europese Commissie kan, voor zover dit noodzakelijk en redelijk is, versies in andere talen of nieuwe versies van deze licentie of geactualiseerde versies van dit aanhangsel publiceren, zonder de draagwijdte van de uit hoofde van de licentie verleende rechten te beperken. Nieuwe versies van de licentie zullen worden gepubliceerd met een uniek versienummer. Alle door de Europese Commissie goedgekeurde taalversies van deze licentie hebben dezelfde waarde. De partijen kunnen zich beroepen op de taalversie van hun keuze. + +14.Bevoegd gerecht +Onverminderd specifieke overeenkomsten tussen de partijen, +— vallen alle geschillen tussen de instellingen, organen en instanties van de Europese Unie, als licentiegeefster, en een licentiehouder in verband met de uitlegging van deze licentie onder de bevoegdheid van het Hof van Justitie van de Europese Unie, conform artikel 272 van het Verdrag betreffende de werking van de Europese Unie, +— vallen alle geschillen tussen andere partijen in verband met de uitlegging van deze licentie onder de uitsluitende bevoegdheid van het bevoegde gerecht van de plaats waar de licentiegever is gevestigd of zijn voornaamste activiteit uitoefent. + +15.Toepasselijk recht +Onverminderd specifieke overeenkomsten tussen de partijen, +— wordt deze licentie beheerst door het recht van de lidstaat van de Europese Unie waar de licentiegever zijn statutaire zetel, verblijfplaats of hoofdkantoor heeft, +— wordt deze licentie beheerst door het Belgische recht indien de licentiegever geen statutaire zetel, verblijfplaats of hoofdkantoor heeft in een lidstaat van de Europese Unie. + + +Aanhangsel +„Verenigbare licenties” in de zin van artikel 5 EUPL zijn: +— GNU General Public License (GPL) v. 2, v. 3 +— GNU Affero General Public License (AGPL) v. 3 +— Open Software License (OSL) v. 2.1, v. 3.0 +— Eclipse Public License (EPL) v. 1.0 +— CeCILL v. 2.0, v. 2.1 +— Mozilla Public Licence (MPL) v. 2 +— GNU Lesser General Public Licence (LGPL) v. 2.1, v. 3 +— Creative Commons Attribution-ShareAlike v. 3.0 Unported (CC BY-SA 3.0) voor andere werken dan software +— European Union Public Licence (EUPL) v. 1.1, v. 1.2 +— Québec Free and Open-Source Licence — Reciprocity (LiLiQ-R) of Strong Reciprocity (LiLiQ-R+). +De Europese Commissie kan dit aanhangsel actualiseren in geval van latere versies van de bovengenoemde licenties zonder dat er een nieuwe EUPL-versie wordt ontwikkeld, zolang die versies de uit hoofde van artikel 2 van deze licentie verleende rechten verlenen en ze de betrokken broncode beschermen tegen exclusieve toe-eigening. +Voor alle andere wijzigingen van of aanvullingen op dit aanhangsel is de ontwikkeling van een nieuwe EUPL-versie vereist. +``` diff --git a/README.md b/README.md new file mode 100644 index 0000000..a5dd0aa --- /dev/null +++ b/README.md @@ -0,0 +1,110 @@ +# Design Tokens + +Open Inwoner projects follow the [NL Design System](https://github.com/nl-design-system). We organize +the design tokens in JSON files and use them within the Open Forms +backend project. + +## How it works + +Specify the design tokens in JSON files, which are picked up and merged using the +[style-dictionary](https://www.npmjs.com/package/style-dictionary) library. The resulting packages +include various build targets, such as ES6 modules, CSS variables files, SASS vars... to be consumed +in downstream projects. + +The draft [Design Token Format](https://design-tokens.github.io/community-group/format/) drives the +structure of these design tokens. + +## Usage + +**Using tokens** + +If you are only _consuming_ the design tokens, the easiest integration path is adding this +package in your own project. + +Then, import the desired build target artifact and run your usual build chain. + +**Developing and using tokens** + +If you actively need to add or change design tokens, we recommend installing the package locally and +using npm workspaces or `npm link` for the least-friction experience. For Open Forms specifically, +we include the package as a git-submodule and leverage npm workspaces with instructions in the +downstream projects. + +This allows you to create atomic PRs with design token changes, while being able to develop against +the newest changes. + +Run: + +```bash +npm start +``` + +to start the watcher which will re-build on changes. + +## Naming pattern + +Because of the way style-dictionary works, you have to pay close attention to the structure of the +tokens. E.g. if you have two tokens definition files like: + +```json +{ + "of": { + "color": { + "fg": {"value": "#000000"} + } + } +} +``` + +```json +{ + "of": { + "color": { + "fg": { + "muted": {"value": "#000000"} + } + } + } +} +``` + +Then only `--oi-color-fg` will be emitted since the merged object sees a `value` key at the +`oi.color.fg` path. + +You can usually avoid this by sticking to a structure adhering to: + +``` +.... +``` + +Where `UIState` can be blank or a value like `hover`, `active`... + +Alternatively, if the structure is not that important, you can put the tokens on the same level, +e.g.: + +```json +{ + "of": { + "color": { + "fg-muted": {"value": "#000000"} + } + } +} +``` + +The latter form is harder to keep track off across files though. + +## Release flow + +We don't let `npm` apply the git tags when releasing a new version, instead follow this process: + +```bash +npm version --no-git-tag-version minor +git commit -am ":bookmark: Bump to version " +git tag "" +git push origin main --tags +``` + +If you have PGP keys set up, you can use them for the git tag operation. + +The CI pipeline will then publish the new version to npmjs. diff --git a/bin/check_token_nesting.py b/bin/check_token_nesting.py new file mode 100755 index 0000000..8ba8d38 --- /dev/null +++ b/bin/check_token_nesting.py @@ -0,0 +1,90 @@ +#!/usr/bin/env python +# +# Check the token definitions and the output files for expected number of leaf nodes. +# +# This linter helps preventing nesting mistakes since style-dictionary has some +# peculiar behavour when nesting tokens and a 'value' key is discovered. +# +# Run as ./bin/check_token_nesting.py +# +from pathlib import Path +import json +import os +import sys + +ROOT_DIR = Path(__file__).parent.parent + +CONFIG_FILE = ROOT_DIR / "style-dictionary.config.json" + + +def get_emitted_var_count() -> int: + test_file = ROOT_DIR / "dist" / "root.css" + if not test_file.exists(): + print( + f"Test file {test_file} does not exist, please run 'npm run build' first." + ) + sys.exit(1) + + num_found = 0 + test_prefix = "--" + with open(test_file, "r") as infile: + for line in infile: + if line.strip().startswith(test_prefix): + num_found += 1 + + return num_found + + +def count_leaf_nodes(data: dict) -> int: + num_leaf_nodes = 0 + for key, value in data.items(): + if key in "value": + if isinstance(value, (dict, list)): + raise TypeError("The 'value' key value must be a scalar") + num_leaf_nodes += 1 + continue + + if key == "comment": + continue + + if key.startswith("$"): + continue + + if isinstance(value, dict): + num_leaf_nodes += count_leaf_nodes(value) + else: + raise TypeError("Expected nested object") + + return num_leaf_nodes + + +def main(): + os.chdir(ROOT_DIR) + + with open(CONFIG_FILE, "r") as config_file: + config = json.load(config_file) + + NUM_LEAVES = 0 + + # check the source files + for path_glob in config["source"]: + for path in ROOT_DIR.glob(path_glob): + with open(path, "r") as source_file: + tokens_definition = json.load(source_file) + + NUM_LEAVES += count_leaf_nodes(tokens_definition) + + print(f"Found {NUM_LEAVES} leaf nodes in the source JSON files.") + num_emitted = get_emitted_var_count() + if NUM_LEAVES != num_emitted: + print( + f"Found {num_emitted} emitted variables, while {NUM_LEAVES} were expected.", + file=sys.stdout + ) + sys.exit(1) + else: + print("OK.") + + +if __name__ == "__main__": + main() diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..1c1fd88 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1704 @@ +{ + "name": "@open-formulieren/design-tokens", + "version": "0.51.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "@open-formulieren/design-tokens", + "version": "0.51.0", + "license": "EUPL-1.2", + "devDependencies": { + "chokidar": "^3.5.3", + "chokidar-cli": "^3.0.0", + "prettier": "^2.8.0", + "style-dictionary": "^3.7.0" + } + }, + "node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dev": true, + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/capital-case": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/capital-case/-/capital-case-1.0.4.tgz", + "integrity": "sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3", + "upper-case-first": "^2.0.2" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/change-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/change-case/-/change-case-4.1.2.tgz", + "integrity": "sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==", + "dev": true, + "dependencies": { + "camel-case": "^4.1.2", + "capital-case": "^1.0.4", + "constant-case": "^3.0.4", + "dot-case": "^3.0.4", + "header-case": "^2.0.4", + "no-case": "^3.0.4", + "param-case": "^3.0.4", + "pascal-case": "^3.1.2", + "path-case": "^3.0.4", + "sentence-case": "^3.0.4", + "snake-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar-cli": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chokidar-cli/-/chokidar-cli-3.0.0.tgz", + "integrity": "sha512-xVW+Qeh7z15uZRxHOkP93Ux8A0xbPzwK4GaqD8dQOYc34TlkqUhVSS59fK36DOp5WdJlrRzlYSy02Ht99FjZqQ==", + "dev": true, + "dependencies": { + "chokidar": "^3.5.2", + "lodash.debounce": "^4.0.8", + "lodash.throttle": "^4.1.1", + "yargs": "^13.3.0" + }, + "bin": { + "chokidar": "index.js" + }, + "engines": { + "node": ">= 8.10.0" + } + }, + "node_modules/cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "dependencies": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/constant-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-3.0.4.tgz", + "integrity": "sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3", + "upper-case": "^2.0.2" + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/header-case": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/header-case/-/header-case-2.0.4.tgz", + "integrity": "sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==", + "dev": true, + "dependencies": { + "capital-case": "^1.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", + "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", + "dev": true + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", + "dev": true + }, + "node_modules/lodash.throttle": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", + "integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=", + "dev": true + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dev": true, + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/path-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/path-case/-/path-case-3.0.4.tgz", + "integrity": "sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==", + "dev": true, + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/prettier": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.0.tgz", + "integrity": "sha512-9Lmg8hTFZKG0Asr/kW9Bp8tJjRVluO8EJQVfY2T7FMw9T5jy4I/Uvx0Rca/XWf50QQ1/SS48+6IJWnrb+2yemA==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "node_modules/sentence-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-3.0.4.tgz", + "integrity": "sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3", + "upper-case-first": "^2.0.2" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "node_modules/snake-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", + "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", + "dev": true, + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/style-dictionary": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/style-dictionary/-/style-dictionary-3.7.0.tgz", + "integrity": "sha512-BL4AQS5kNDBXbFHWJhlCve6+ojnHgHkiwhf2nNByU698elXWdyK5b27OprphT4q0/tJ52zB+lodhqxIxbNOajQ==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "change-case": "^4.1.2", + "commander": "^8.3.0", + "fs-extra": "^10.0.0", + "glob": "^7.2.0", + "json5": "^2.2.0", + "jsonc-parser": "^3.0.0", + "lodash": "^4.17.15", + "tinycolor2": "^1.4.1" + }, + "bin": { + "style-dictionary": "bin/style-dictionary" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tinycolor2": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.2.tgz", + "integrity": "sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "dev": true + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/upper-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-2.0.2.tgz", + "integrity": "sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==", + "dev": true, + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/upper-case-first": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-2.0.2.tgz", + "integrity": "sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==", + "dev": true, + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "node_modules/wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "dependencies": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "node_modules/yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dev": true, + "requires": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "capital-case": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/capital-case/-/capital-case-1.0.4.tgz", + "integrity": "sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==", + "dev": true, + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3", + "upper-case-first": "^2.0.2" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "change-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/change-case/-/change-case-4.1.2.tgz", + "integrity": "sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==", + "dev": true, + "requires": { + "camel-case": "^4.1.2", + "capital-case": "^1.0.4", + "constant-case": "^3.0.4", + "dot-case": "^3.0.4", + "header-case": "^2.0.4", + "no-case": "^3.0.4", + "param-case": "^3.0.4", + "pascal-case": "^3.1.2", + "path-case": "^3.0.4", + "sentence-case": "^3.0.4", + "snake-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "chokidar-cli": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chokidar-cli/-/chokidar-cli-3.0.0.tgz", + "integrity": "sha512-xVW+Qeh7z15uZRxHOkP93Ux8A0xbPzwK4GaqD8dQOYc34TlkqUhVSS59fK36DOp5WdJlrRzlYSy02Ht99FjZqQ==", + "dev": true, + "requires": { + "chokidar": "^3.5.2", + "lodash.debounce": "^4.0.8", + "lodash.throttle": "^4.1.1", + "yargs": "^13.3.0" + } + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "constant-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-3.0.4.tgz", + "integrity": "sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==", + "dev": true, + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3", + "upper-case": "^2.0.2" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "header-case": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/header-case/-/header-case-2.0.4.tgz", + "integrity": "sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==", + "dev": true, + "requires": { + "capital-case": "^1.0.4", + "tslib": "^2.0.3" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true + }, + "jsonc-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", + "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", + "dev": true + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", + "dev": true + }, + "lodash.throttle": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", + "integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=", + "dev": true + }, + "lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "requires": { + "tslib": "^2.0.3" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "requires": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dev": true, + "requires": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dev": true, + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "path-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/path-case/-/path-case-3.0.4.tgz", + "integrity": "sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==", + "dev": true, + "requires": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "prettier": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.0.tgz", + "integrity": "sha512-9Lmg8hTFZKG0Asr/kW9Bp8tJjRVluO8EJQVfY2T7FMw9T5jy4I/Uvx0Rca/XWf50QQ1/SS48+6IJWnrb+2yemA==", + "dev": true + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "sentence-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-3.0.4.tgz", + "integrity": "sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==", + "dev": true, + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3", + "upper-case-first": "^2.0.2" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "snake-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", + "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", + "dev": true, + "requires": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "style-dictionary": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/style-dictionary/-/style-dictionary-3.7.0.tgz", + "integrity": "sha512-BL4AQS5kNDBXbFHWJhlCve6+ojnHgHkiwhf2nNByU698elXWdyK5b27OprphT4q0/tJ52zB+lodhqxIxbNOajQ==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "change-case": "^4.1.2", + "commander": "^8.3.0", + "fs-extra": "^10.0.0", + "glob": "^7.2.0", + "json5": "^2.2.0", + "jsonc-parser": "^3.0.0", + "lodash": "^4.17.15", + "tinycolor2": "^1.4.1" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "tinycolor2": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.2.tgz", + "integrity": "sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "dev": true + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + }, + "upper-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-2.0.2.tgz", + "integrity": "sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==", + "dev": true, + "requires": { + "tslib": "^2.0.3" + } + }, + "upper-case-first": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-2.0.2.tgz", + "integrity": "sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==", + "dev": true, + "requires": { + "tslib": "^2.0.3" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..80433d9 --- /dev/null +++ b/package.json @@ -0,0 +1,43 @@ +{ + "name": "@open-inwoner/design-tokens", + "version": "0.0.1", + "description": "Design tokens for Open Inwoner", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "build": "style-dictionary build -c style-dictionary.config.json", + "start": "chokidar --initial --command 'npm run build' 'src/**/*.tokens.json' 'src/**/tokens.json'", + "format": "prettier --write 'src/**/*'", + "checkformat": "prettier --check 'src/**/*'" + }, + "main": "dist/index.js", + "files": [ + "dist/", + "src/", + "assets/" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/maykinmedia/open-inwoner-design-tokens.git" + }, + "keywords": [ + "style-dictionary", + "common", + "ground", + "nl", + "design", + "system", + "open-inwoner" + ], + "author": "Maykin Media", + "license": "EUPL-1.2", + "bugs": { + "url": "https://github.com/maykinmedia/open-inwoner-design-tokens/issues" + }, + "homepage": "https://github.com/maykinmedia/open-inwoner-design-tokens#readme", + "devDependencies": { + "chokidar": "^3.5.3", + "chokidar-cli": "^3.0.0", + "prettier": "^2.8.0", + "style-dictionary": "^3.7.0" + } +} diff --git a/src/common/color.tokens.json b/src/common/color.tokens.json new file mode 100644 index 0000000..7bd8741 --- /dev/null +++ b/src/common/color.tokens.json @@ -0,0 +1,122 @@ +{ + "of": { + "color": { + "$extensions": { + "dte.metadata": { + "groupDescription": "Globally tweak commonly used colors." + } + }, + "primary": { + "value": "#01689B", + "comment": "The primary color makes up a large part of the theme, it is used in buttons, accents and link color for example.", + "$extensions": { + "dte.metadata": { + "isCurated": true, + "category": "color" + } + } + }, + "primary-light": {"value": "#d3e3ec"}, + "secondary": { + "value": "#cee0ea", + "comment": "The secondary compliments the primary color and serves as the default for a number of more fine-grained tokens.", + "$extensions": { + "dte.metadata": { + "isCurated": true, + "category": "color" + } + } + }, + "info": { + "value": "#007bc7", + "comment": "The highlight color for informational states and/or messages.", + "$extensions": { + "dte.metadata": { + "isCurated": true, + "category": "color" + } + } + }, + "success": { + "value": "green", + "comment": "The highlight color for success states and/or messages.", + "$extensions": { + "dte.metadata": { + "isCurated": true, + "category": "color" + } + } + }, + "warning": { + "value": "#E17000", + "comment": "The highlight color for warning states and/or messages.", + "$extensions": { + "dte.metadata": { + "isCurated": true, + "category": "color" + } + } + }, + "danger": { + "value": "#D52B1E", + "comment": "The highlight color for error/critical states and/or messages.", + "$extensions": { + "dte.metadata": { + "isCurated": true, + "category": "color" + } + } + }, + "bg": { + "value": "#ffffff", + "comment": "Background color for the (main) user interface.", + "$extensions": { + "dte.metadata": { + "isCurated": true, + "category": "color" + } + } + }, + "fg": { + "value": "#000000", + "comment": "Font/foreground color for the (main) user interface.", + "$extensions": { + "dte.metadata": { + "isCurated": true, + "category": "color" + } + } + }, + "fg-muted": { + "value": "#767676", + "comment": "Font/foreground color for non-actionable or less-important content.", + "$extensions": { + "dte.metadata": { + "category": "color" + } + } + }, + "border": { + "value": "#767676", + "comment": "Default color for borders." + }, + "focus": { + "$extensions": { + "dte.metadata": { + "stateType": "userAction" + } + }, + "border": { + "value": "#0177b2", + "comment": "Default color for borders of focused elements." + } + }, + "read-only": { + "bg": { + "value": "#e9ecef", + "comment": "Default color for disabled/non-interactable input elements." + } + } + } + } +} diff --git a/src/common/layout.tokens.json b/src/common/layout.tokens.json new file mode 100644 index 0000000..c28feb6 --- /dev/null +++ b/src/common/layout.tokens.json @@ -0,0 +1,7 @@ +{ + "of": { + "layout": { + "bg": {"value": "#E6E6E6"} + } + } +} diff --git a/src/common/typography.tokens.json b/src/common/typography.tokens.json new file mode 100644 index 0000000..ef6b1a1 --- /dev/null +++ b/src/common/typography.tokens.json @@ -0,0 +1,37 @@ +{ + "of": { + "heading": { + "fg": {"value": "{oi.color.fg}"} + }, + "utrecht-link": { + "font-family": {"value": "{oi.typography.sans-serif.font-family}"} + }, + "text": { + "margin": {"value": "20px"}, + "font-size": {"value": "1rem"}, + "big": { + "font-size": {"value": "1.125rem"} + }, + "small": { + "font-size": {"value": "0.875rem"} + }, + "mobile": { + "margin": {"value": "{oi.text.margin}"} + }, + "tablet": { + "margin": {"value": "{oi.text.margin}"} + }, + "laptop": { + "margin": {"value": "{oi.text.margin}"} + }, + "desktop": { + "margin": {"value": "{oi.text.margin}"} + } + }, + "typography": { + "sans-serif": { + "font-family": {"value": "Roboto, sans-serif"} + } + } + } +} diff --git a/src/community/utrecht/action.tokens.json b/src/community/utrecht/action.tokens.json new file mode 100644 index 0000000..29f687d --- /dev/null +++ b/src/community/utrecht/action.tokens.json @@ -0,0 +1,22 @@ +{ + "utrecht": { + "action": { + "activate": { + "cursor": {"value": "pointer"} + }, + "disabled": { + "cursor": { + "value": "not-allowed" + } + }, + "inert": { + "cursor": {"value": "default"} + }, + "submit": { + "cursor": { + "value": "pointer" + } + } + } + } +} diff --git a/src/community/utrecht/alert.tokens.json b/src/community/utrecht/alert.tokens.json new file mode 100644 index 0000000..f8326a2 --- /dev/null +++ b/src/community/utrecht/alert.tokens.json @@ -0,0 +1,56 @@ +{ + "utrecht": { + "alert": { + "icon": { + "gap": { + "value": "16px" + }, + "error": { + "color": { + "value": "{oi.color.danger}" + } + }, + "info": { + "color": { + "value": "{oi.color.info}" + } + }, + "warning": { + "color": { + "value": "{oi.color.warning}" + } + }, + "ok": { + "color": { + "value": "{oi.color.success}" + } + } + }, + "padding-block-end": {"value": "20px"}, + "padding-block-start": {"value": "20px"}, + "padding-inline-start": {"value": "20px"}, + "padding-inline-end": {"value": "20px"}, + "error": { + "background-color": { + "value": "#f8d7da", + "comment": "from formio.form.css .formio-error" + } + }, + "info": { + "background-color": { + "value": "#d9ebf7" + } + }, + "warning": { + "background-color": { + "value": "#fff3cd" + } + }, + "ok": { + "background-color": { + "value": "#ddffdd" + } + } + } + } +} diff --git a/src/community/utrecht/button.tokens.json b/src/community/utrecht/button.tokens.json new file mode 100644 index 0000000..fcdeb35 --- /dev/null +++ b/src/community/utrecht/button.tokens.json @@ -0,0 +1,147 @@ +{ + "utrecht": { + "button": { + "background-color": {"value": "{oi.button.bg}"}, + "border-color": {"value": "rgba(0,0,0,0)"}, + "border-radius": {"value": "0"}, + "border-width": {"value": "2px"}, + "color": {"value": "{oi.button.fg}", + i}, + "font-size": {"value": "{oi.text.big.font-size}"}, + "line-height": {"value": "1.333"}, + "min-block-size": {"value": "0"}, + "min-inline-size": {"value": "0"}, + "padding-block-start": {"value": "10.003px"}, + "padding-block-end": {"value": "10.003px"}, + "padding-inline-start": {"value": "12px"}, + "padding-inline-end": {"value": "12px"}, + + "focus": { + "border-color": {"value": "transparent"} + }, + + "hover": { + "background-color": {"value": "{oi.button.hover.bg}"}, + "border-color": {"value": "#5e5e5e"}, + "color": {"value": "{oi.button.fg}"} + }, + + "active": { + "background-color": {"value": "{oi.button.active.bg}"}, + "border-color": {"value": "{oi.color.border}"}, + "color": {"value": "{oi.button.active.fg}"} + }, + + "primary-action": { + "background-color": {"value": "{oi.button.primary.bg}"}, + "border-color": {"value": "{oi.color.primary}"}, + "color": {"value": "{oi.button.primary.fg}"}, + + "hover": { + "background-color": {"value": "{oi.button.primary.hover.bg}"}, + "border-color": {"value": "#01537c"}, + "color": {"value": "{oi.button.primary.fg}"} + }, + + "active": { + "background-color": {"value": "{oi.button.primary.active.bg}"}, + "border-color": {"value": "rgba(0,0,0,0)"}, + "color": {"value": "{oi.button.primary.active.fg}"} + }, + + "focus": { + "border-color": {"value": "transparent"} + }, + + "danger": { + "background-color": {"value": "{oi.button.danger.bg}"}, + "border-color": {"value": "#aa2218"}, + "color": {"value": "{oi.button.danger.fg}"}, + + "hover": { + "background-color": {"value": "{oi.button.danger.hover.bg}"}, + "border-color": {"value": "#881b13"}, + "color": {"value": "{oi.button.danger.fg}"} + }, + + "active": { + "background-color": {"value": "{oi.button.danger.active.bg}"}, + "border-color": {"value": "rgba(0,0,0,0)"}, + "color": {"value": "{oi.button.danger.active.fg}"} + }, + + "focus": { + "border-color": {"value": "transparent"} + } + } + }, + + "secondary-action": { + "border-color": {"value": "#5e5e5e"}, + + "focus": { + "border-color": {"value": "transparent"} + }, + + "danger": { + "background-color": {"value": "{oi.color.danger}"}, + "color": {"value": "#fce9e8"}, + + "focus": { + "border-color": {"value": "transparent"} + } + } + }, + + "subtle": { + "border": { + "color": { + "value": "rgba(0,0,0,0)" + } + }, + "hover": { + "background": { + "color": { + "value": "{oi.color.bg}" + } + } + }, + "danger": { + "color": { + "value": "{oi.color.danger}" + }, + "background": { + "color": { + "value": "{oi.color.bg}" + } + }, + "hover": { + "background": { + "color": { + "value": "{oi.color.bg}" + } + } + }, + "active": { + "background": { + "color": { + "value": "#a02017" + } + } + } + } + }, + + "disabled": { + "background": { + "color": { + "value": "#b0b0b0" + } + }, + "color": { + "value": "#ffffff" + } + } + } + } +} diff --git a/src/community/utrecht/calendar.tokens.json b/src/community/utrecht/calendar.tokens.json new file mode 100644 index 0000000..0d11edf --- /dev/null +++ b/src/community/utrecht/calendar.tokens.json @@ -0,0 +1,78 @@ +{ + "utrecht": { + "calendar": { + "background-color": {"value": "{oi.color.bg}"}, + "table": { + "padding-block-start": {}, + "padding-block-end": {}, + "weeks-item": { + "width": {"value": "44px"}, + "padding-block-start": {"value": "4px"}, + "padding-block-end": {"value": "10px"}, + "line-height": {"value": "24px"} + }, + "days-item-day": { + "size": {"value": "44px"}, + "color": {"value": "{oi.color.fg}"}, + "border-width": {"value": "2px"}, + "border-color": {"value": "transparent"}, + "hover": { + "background-color": {"value": "transparent"}, + "border-color": {"value": "{oi.button.hover.color-border}"}, + "color": {"value": "{oi.color.fg}"} + }, + "focus": { + "border-color": {"value": "{oi.button.focus.color-border}"} + }, + "active": { + "background-color": {"value": "{oi.button.active.bg}"}, + "color": {"value": "{oi.button.active.fg}"}, + "border-color": {"value": "{oi.button.active.color-border}"} + }, + "out-of-the-month": { + "color": {"value": "{oi.color.fg-muted}"}, + "border-color": {"value": "transparent"}, + "background-color": {} + }, + "is-today": { + "color": {"value": "{oi.color.primary}"}, + "font-weight": {"value": "700"}, + "border-color": {"value": "{oi.color.primary}"}, + "background-color": {"value": "{oi.color.primary-light}"} + }, + "emphasis": { + "color": {}, + "font-weight": {}, + "border-color": {"value": "transparent"}, + "background-color": {} + }, + "selected": { + "color": {"value": "{oi.button.primary.fg}"}, + "font-weight": {}, + "border-color": {"value": "{oi.button.primary.color-border}"}, + "background-color": {"value": "{oi.button.primary.bg}"} + }, + "disabled": { + "color": {"value": "#666666"}, + "border-color": {"value": "transparent"}, + "background-color": {"value": "#e6e6e6"} + } + } + }, + "navigation": { + "background-color": {"value": "{oi.color.bg}"}, + "color": {"value": "{oi.color.fg}"}, + "padding-block-start": {"value": "4px"}, + "padding-block-end": {"value": "4px"}, + "label": { + "min-inline-size": {"value": "200px"}, + "color": {"value": "{oi.color.fg}"}, + "font-size": {"value": "{oi.text.font-size}"} + } + }, + "icon": { + "size": {"value": "24px"} + } + } + } +} diff --git a/src/community/utrecht/checkbox.tokens.json b/src/community/utrecht/checkbox.tokens.json new file mode 100644 index 0000000..49440ee --- /dev/null +++ b/src/community/utrecht/checkbox.tokens.json @@ -0,0 +1,58 @@ +{ + "utrecht": { + "checkbox": { + "background-color": {"value": "{oi.color.bg}"}, + "border-color": {"value": "{oi.field-border.color}"}, + "border-radius": {"value": "0"}, + "border-width": {"value": "1px"}, + "color": {"value": "{oi.color.fg}"}, + "margin-inline-end": {"value": "12px"}, + "size": {"value": "24px"}, + "icon": { + "size": {} + }, + "active": { + "border-color": {}, + "border-width": {}, + "background-color": {}, + "color": {} + }, + "hover": { + "border-color": {}, + "border-width": {}, + "background-color": {}, + "color": {} + }, + "focus": { + "border-color": {}, + "border-width": {}, + "background-color": {}, + "color": {} + }, + "disabled": { + "border-color": {}, + "border-width": {}, + "background-color": {}, + "color": {} + }, + "checked": { + "border-color": {}, + "border-width": {}, + "background-color": {"value": "{oi.color.primary}"}, + "color": {"value": "{oi.color.bg}"} + }, + "indeterminate": { + "border-color": {}, + "border-width": {}, + "background-color": {}, + "color": {} + }, + "invalid": { + "border-color": {}, + "border-width": {}, + "background-color": {}, + "color": {} + } + } + } +} diff --git a/src/community/utrecht/data-list.tokens.json b/src/community/utrecht/data-list.tokens.json new file mode 100644 index 0000000..c6ea013 --- /dev/null +++ b/src/community/utrecht/data-list.tokens.json @@ -0,0 +1,23 @@ +{ + "utrecht": { + "data-list": { + "margin-block-end": {"value": "0"}, + "margin-block-start": {"value": "0"}, + "item-key": { + "font-weight": {"value": 700} + }, + "rows": { + "column": { + "inline-size": {"value": "80%"}, + "min-inline-size": {"value": "25ch"} + }, + "item": { + "margin-block-start": {"value": "16px"} + }, + "item-value": { + "margin-block-start": {"value": "0"} + } + } + } + } +} diff --git a/src/community/utrecht/focus.tokens.json b/src/community/utrecht/focus.tokens.json new file mode 100644 index 0000000..ee6cfd0 --- /dev/null +++ b/src/community/utrecht/focus.tokens.json @@ -0,0 +1,10 @@ +{ + "utrecht": { + "focus": { + "outline-color": {"value": "#000"}, + "outline-offset": {"value": "0"}, + "outline-style": {"value": "solid"}, + "outline-width": {"value": "2px"} + } + } +} diff --git a/src/community/utrecht/form-control.tokens.json b/src/community/utrecht/form-control.tokens.json new file mode 100644 index 0000000..ba6df27 --- /dev/null +++ b/src/community/utrecht/form-control.tokens.json @@ -0,0 +1,10 @@ +{ + "utrecht": { + "form-control": { + "background-color": {"value": "{oi.color.bg}"}, + "read-only": { + "background-color": {"value": "{oi.color.read-only.bg}"} + } + } + } +} diff --git a/src/community/utrecht/form-field-description.tokens.json b/src/community/utrecht/form-field-description.tokens.json new file mode 100644 index 0000000..846f4a3 --- /dev/null +++ b/src/community/utrecht/form-field-description.tokens.json @@ -0,0 +1,15 @@ +{ + "utrecht": { + "form-field-description": { + "color": {"value": "{oi.color.fg}"}, + "font-family": {"value": "{oi.typography.sans-serif.font-family}"}, + "font-size": {"value": "{oi.text.font-size}"}, + "font-style": {"value": "normal"}, + "invalid": { + "color": {"value": "{oi.color.danger}"} + }, + "margin-block-end": {"value": "0"}, + "margin-block-start": {"value": "8px"} + } + } +} diff --git a/src/community/utrecht/form-field.tokens.json b/src/community/utrecht/form-field.tokens.json new file mode 100644 index 0000000..87f478d --- /dev/null +++ b/src/community/utrecht/form-field.tokens.json @@ -0,0 +1,16 @@ +{ + "utrecht": { + "form-field": { + "invalid": { + "border-inline-start": { + "color": {"value": "{oi.color.danger}"}, + "width": {"value": "4px"} + }, + "padding-inline-start": {"value": "16px"} + }, + "label": { + "margin-block-end": {"value": "8px"} + } + } + } +} diff --git a/src/community/utrecht/form-label.tokens.json b/src/community/utrecht/form-label.tokens.json new file mode 100644 index 0000000..56ba592 --- /dev/null +++ b/src/community/utrecht/form-label.tokens.json @@ -0,0 +1,9 @@ +{ + "utrecht": { + "form-label": { + "color": {"value": "{oi.color.fg}"}, + "font-weight": {"value": "{oi.label.font-weight}"}, + "font-size": {"value": "{oi.text.big.font-size}"} + } + } +} diff --git a/src/community/utrecht/heading-1.tokens.json b/src/community/utrecht/heading-1.tokens.json new file mode 100644 index 0000000..4daef4f --- /dev/null +++ b/src/community/utrecht/heading-1.tokens.json @@ -0,0 +1,14 @@ +{ + "utrecht": { + "heading-1": { + "color": {"value": "{oi.color.fg}"}, + "font-family": {"value": "{oi.typography.sans-serif.font-family}"}, + "font-size": {"value": "1.9375rem"}, + "font-weight": {}, + "letter-spacing": {"value": "normal"}, + "line-height": {"value": "1.100"}, + "margin-block-end": {}, + "margin-block-start": {} + } + } +} diff --git a/src/community/utrecht/heading-2.tokens.json b/src/community/utrecht/heading-2.tokens.json new file mode 100644 index 0000000..86b0be5 --- /dev/null +++ b/src/community/utrecht/heading-2.tokens.json @@ -0,0 +1,14 @@ +{ + "utrecht": { + "heading-2": { + "color": {"value": "{oi.color.fg}"}, + "font-family": {"value": "{oi.typography.sans-serif.font-family}"}, + "font-size": {"value": "1.4375rem"}, + "font-weight": {"value": "normal"}, + "letter-spacing": {"value": "normal"}, + "line-height": {"value": "1.129"}, + "margin-block-end": {"value": "0"}, + "margin-block-start": {"value": "0"} + } + } +} diff --git a/src/community/utrecht/heading-3.tokens.json b/src/community/utrecht/heading-3.tokens.json new file mode 100644 index 0000000..1a0abde --- /dev/null +++ b/src/community/utrecht/heading-3.tokens.json @@ -0,0 +1,13 @@ +{ + "utrecht": { + "heading-3": { + "color": {"value": "{oi.color.fg}"}, + "font-family": {"value": "{oi.typography.sans-serif.font-family}"}, + "font-size": {"value": "1.1875rem"}, + "font-weight": {"value": "normal"}, + "line-height": {}, + "margin-block-end": {"value": "20px"}, + "margin-block-start": {"value": "12px"} + } + } +} diff --git a/src/community/utrecht/link.tokens.json b/src/community/utrecht/link.tokens.json new file mode 100644 index 0000000..e4b7204 --- /dev/null +++ b/src/community/utrecht/link.tokens.json @@ -0,0 +1,22 @@ +{ + "utrecht": { + "link": { + "color": {"value": "{oi.color.primary}"}, + "text-decoration": { + "value": "underline" + }, + "hover": { + "color": {"value": "{oi.color.primary}"}, + "text-decoration": { + "value": "none" + } + }, + "current": { + "font-weight": {"value": "bold"} + }, + "placeholder": { + "color": {"value": "{oi.color.fg-muted}"} + } + } + } +} diff --git a/src/community/utrecht/page-content.tokens.json b/src/community/utrecht/page-content.tokens.json new file mode 100644 index 0000000..203f7dc --- /dev/null +++ b/src/community/utrecht/page-content.tokens.json @@ -0,0 +1,21 @@ +{ + "utrecht": { + "page-content": { + "padding-block-end": {"value": "20px"}, + "padding-block-start": {"value": "20px"} + } + }, + "of": { + "utrecht-page-content": { + "$extensions": { + "dte.metadata": { + "groupDescription": "Open Forms' extensions on the utrecht-page-content, for responsive styling." + } + }, + "mobile": { + "padding-block-end": {"value": "0"}, + "padding-block-start": {"value": "0"} + } + } + } +} diff --git a/src/community/utrecht/page-footer.tokens.json b/src/community/utrecht/page-footer.tokens.json new file mode 100644 index 0000000..8c4b502 --- /dev/null +++ b/src/community/utrecht/page-footer.tokens.json @@ -0,0 +1,56 @@ +{ + "utrecht": { + "page-footer": { + "$extensions": { + "dte.metadata": { + "groupDescription": "Default Open Forms footer styling." + } + }, + + "color": {"value": "{oi.color.bg}"}, + "background-color": {"value": "{oi.color.primary}"}, + "background-image": {}, + "padding-inline-end": {"value": "20px"}, + "padding-inline-start": {"value": "20px"}, + "padding-block-end": {"value": "20px"}, + "padding-block-start": {"value": "20px"} + } + }, + "of": { + "utrecht-page-footer": { + "$extensions": { + "dte.metadata": { + "groupDescription": "Open Forms' extensions on the utrecht-page-footer, for responsive styling." + } + }, + + "max-inline-size": {"value": "100%"}, + + "mobile": { + "padding-block-end": {"value": "10px"}, + "padding-block-start": {"value": "10px"}, + "padding-inline-end": {"value": "15px"}, + "padding-inline-start": {"value": "15px"} + }, + "tablet": { + "padding-block-end": {"value": "10px"}, + "padding-block-start": {"value": "10px"}, + "padding-inline-end": {"value": "15px"}, + "padding-inline-start": {"value": "15px"} + }, + "laptop": { + "padding-block-end": {"value": "20px"}, + "padding-block-start": {"value": "20px"}, + "padding-inline-end": {"value": "20px"}, + "padding-inline-start": {"value": "20px"} + }, + "desktop": { + "padding-block-end": {"value": "20px"}, + "padding-block-start": {"value": "20px"}, + "padding-inline-end": {"value": "20px"}, + "padding-inline-start": {"value": "20px"}, + "max-inline-size": {"value": "1200px"} + } + } + } +} diff --git a/src/community/utrecht/page-header.tokens.json b/src/community/utrecht/page-header.tokens.json new file mode 100644 index 0000000..5875cd8 --- /dev/null +++ b/src/community/utrecht/page-header.tokens.json @@ -0,0 +1,53 @@ +{ + "utrecht": { + "page-header": { + "$extensions": { + "dte.metadata": { + "groupDescription": "Default Open Forms header styling." + } + }, + + "background-color": {"value": "#ffffff"}, + "color": {"value": "{oi.color.fg}"}, + "padding-inline-end": {"value": "20px"}, + "padding-inline-start": {"value": "20px"}, + "padding-block-end": {"value": "20px"}, + "padding-block-start": {"value": "20px"} + } + }, + + "of": { + "utrecht-page-header": { + "$extensions": { + "dte.metadata": { + "groupDescription": "Open Forms' extensions on the utrecht-page-header, for responsive styling." + } + }, + + "mobile": { + "padding-block-end": {"value": "10px"}, + "padding-block-start": {"value": "10px"}, + "padding-inline-end": {"value": "15px"}, + "padding-inline-start": {"value": "10px"} + }, + "tablet": { + "padding-block-end": {"value": "20px"}, + "padding-block-start": {"value": "20px"}, + "padding-inline-end": {"value": "20px"}, + "padding-inline-start": {"value": "20px"} + }, + "laptop": { + "padding-block-end": {"value": "20px"}, + "padding-block-start": {"value": "20px"}, + "padding-inline-end": {"value": "20px"}, + "padding-inline-start": {"value": "20px"} + }, + "desktop": { + "padding-block-end": {"value": "20px"}, + "padding-block-start": {"value": "20px"}, + "padding-inline-end": {"value": "20px"}, + "padding-inline-start": {"value": "20px"} + } + } + } +} diff --git a/src/community/utrecht/page.tokens.json b/src/community/utrecht/page.tokens.json new file mode 100644 index 0000000..6b3c156 --- /dev/null +++ b/src/community/utrecht/page.tokens.json @@ -0,0 +1,21 @@ +{ + "utrecht": { + "page": { + "padding-inline-end": {"value": "20px"}, + "padding-inline-start": {"value": "20px"} + } + }, + "of": { + "utrecht-page": { + "$extensions": { + "dte.metadata": { + "groupDescription": "Open Forms' extensions on the utrecht-page, for responsive styling." + } + }, + "mobile": { + "padding-inline-end": {"value": "0"}, + "padding-inline-start": {"value": "0"} + } + } + } +} diff --git a/src/community/utrecht/paragraph.tokens.json b/src/community/utrecht/paragraph.tokens.json new file mode 100644 index 0000000..1388ec1 --- /dev/null +++ b/src/community/utrecht/paragraph.tokens.json @@ -0,0 +1,8 @@ +{ + "utrecht": { + "paragraph": { + "margin-block-end": {"value": 0}, + "margin-block-start": {"value": 0} + } + } +} diff --git a/src/community/utrecht/radio-button.tokens.json b/src/community/utrecht/radio-button.tokens.json new file mode 100644 index 0000000..8a8c323 --- /dev/null +++ b/src/community/utrecht/radio-button.tokens.json @@ -0,0 +1,70 @@ +{ + "utrecht": { + "radio-button": { + "size": {"value": "24px"}, + "border-color": {"value": "{oi.field-border.color}"}, + "color": {"value": "{oi.color.fg}"}, + "border-width": {"value": "1px"}, + "background-color": {"value": "{oi.color.bg}"}, + "border-radius": {"value": "0"}, + "margin-inline-end": {"value": "12px"}, + "icon": { + "size": {"value": "30%"} + }, + + "active": { + "border-color": {}, + "border-width": {}, + "background-color": {}, + "color": {} + }, + "focus": { + "border-color": {}, + "border-width": {}, + "background-color": {}, + "color": {} + }, + "hover": { + "border-color": {}, + "border-width": {}, + "background-color": {}, + "color": {} + }, + "disabled": { + "border-color": {}, + "border-width": {}, + "background-color": {}, + "color": {} + }, + "checked": { + "border-color": {}, + "border-width": {}, + "background-color": {"value": "{oi.color.primary}"}, + "color": {"value": "{oi.color.bg}"}, + "active": { + "background-color": {}, + "border-color": {}, + "border-width": {}, + "color": {} + }, + "focus": { + "border-color": {}, + "border-width": {}, + "background-color": {}, + "color": {} + }, + "hover": { + "background-color": {}, + "border-width": {}, + "border-color": {}, + "color": {} + } + }, + "invalid": { + "border-color": {}, + "border-width": {}, + "color": {} + } + } + } +} diff --git a/src/community/utrecht/select.tokens.json b/src/community/utrecht/select.tokens.json new file mode 100644 index 0000000..ee638f9 --- /dev/null +++ b/src/community/utrecht/select.tokens.json @@ -0,0 +1,34 @@ +{ + "utrecht": { + "select": { + "background-color": {"value": "{oi.color.bg}"}, + "border-bottom-width": {}, + "border-color": {"value": "{oi.color.border}"}, + "border-radius": {"value": "0"}, + "border-width": {"value": "1px"}, + "color": {}, + "font-family": {}, + "font-size": {}, + "max-inline-size": {"value": "100%"}, + "padding-block-end": {"value": "12px"}, + "padding-block-start": {"value": "12px"}, + "padding-inline-end": {"value": "12px"}, + "padding-inline-start": {"value": "12px"}, + "disabled": { + "background-color": {"value": "{oi.color.read-only.bg}"}, + "border-color": {}, + "color": {} + }, + "focus": { + "background-color": {}, + "border-color": {}, + "color": {} + }, + "invalid": { + "background-color": {}, + "border-color": {}, + "border-width": {} + } + } + } +} diff --git a/src/community/utrecht/textarea.tokens.json b/src/community/utrecht/textarea.tokens.json new file mode 100644 index 0000000..eba531d --- /dev/null +++ b/src/community/utrecht/textarea.tokens.json @@ -0,0 +1,24 @@ +{ + "utrecht": { + "textarea": { + "background-color": {"value": "{oi.color.bg}"}, + "border-bottom-width": {"value": "1px"}, + "border-color": {"value": "{oi.color.border}"}, + "border-radius": {"value": "0"}, + "border-width": {"value": "1px"}, + "color": {"value": "{oi.color.fg}"}, + "font-family": {"value": "{oi.typography.sans-serif.font-family}"}, + "font-size": {"value": "{oi.text.font-size}"}, + "line-height": {"value": "1.5"}, + "max-inline-size": {"value": "none"}, + "padding-block-end": {"value": "12px"}, + "padding-block-start": {"value": "12px"}, + "padding-inline-end": {"value": "12px"}, + "padding-inline-start": {"value": "12px"}, + "placeholder-color": {"value": "{oi.color.fg-muted}"}, + "disabled": { + "background-color": {"value": "#e9ecef"} + } + } + } +} diff --git a/src/community/utrecht/textbox.tokens.json b/src/community/utrecht/textbox.tokens.json new file mode 100644 index 0000000..bf0d1db --- /dev/null +++ b/src/community/utrecht/textbox.tokens.json @@ -0,0 +1,28 @@ +{ + "utrecht": { + "textbox": { + "background-color": {"value": "{oi.color.bg}"}, + "border-color": {"value": "{oi.color.border}"}, + "border-radius": {"value": "0"}, + "border-width": {"value": "1px"}, + "color": {"value": "{oi.color.fg}"}, + "font-family": {"value": "{oi.typography.sans-serif.font-family}"}, + "font-size": {"value": "{oi.text.font-size}"}, + "line-height": {"value": "1.5"}, + "max-inline-size": {"value": "none"}, + "padding-block-end": {"value": "12px"}, + "padding-block-start": {"value": "12px"}, + "padding-inline-end": {"value": "12px"}, + "padding-inline-start": {"value": "12px"}, + "placeholder": { + "color": {"value": "{oi.color.fg-muted}"} + }, + "disabled": { + "background-color": {"value": "{oi.color.read-only.bg}"} + }, + "read-only": { + "background-color": {"value": "{oi.color.read-only.bg}"} + } + } + } +} diff --git a/src/community/utrecht/typography.tokens.json b/src/community/utrecht/typography.tokens.json new file mode 100644 index 0000000..b2c508a --- /dev/null +++ b/src/community/utrecht/typography.tokens.json @@ -0,0 +1,7 @@ +{ + "utrecht": { + "document": { + "font-family": {"value": "{oi.typography.sans-serif.font-family}"} + } + } +} diff --git a/src/community/utrecht/unordered-list.tokens.json b/src/community/utrecht/unordered-list.tokens.json new file mode 100644 index 0000000..a685ef0 --- /dev/null +++ b/src/community/utrecht/unordered-list.tokens.json @@ -0,0 +1,19 @@ +{ + "utrecht": { + "unordered-list": { + "font-size": {}, + "line-height": {}, + "margin-block-start": {"value": "12px"}, + "margin-block-end": {"value": "20px"}, + "padding-inline-start": {}, + "item": { + "margin-block-start": {"value": "4px"}, + "margin-block-end": {}, + "padding-inline-start": {"value": "8px"} + }, + "marker": { + "color": {} + } + } + } +} diff --git a/src/components/app.tokens.json b/src/components/app.tokens.json new file mode 100644 index 0000000..24ca02c --- /dev/null +++ b/src/components/app.tokens.json @@ -0,0 +1,40 @@ +{ + "of": { + "app": { + "$extensions": { + "dte.metadata": { + "groupDescription": "The outer SDK form 'app' wrapper." + } + }, + "body": { + "padding-block-end": {"value": "0"}, + "padding-block-start": {"value": "0"}, + "mobile": { + "padding-block-end": {"value": "0"}, + "padding-block-start": {"value": "15px"} + } + }, + + "grid-column-gap": {"value": "20px"}, + + "mobile": { + "grid-row-gap": {"value": "0"}, + "padding-block-end": {"value": "15px"}, + "padding-block-start": { + "value": "0", + "comment": "Allow room for the progress indicator" + }, + "padding-inline-end": {"value": "15px"}, + "padding-inline-start": {"value": "15px"} + }, + + "progress-indicator": { + "mobile": { + "inset-block-start": {"value": "0"}, + "margin-inline-end": {"value": "calc(-1 * {oi.app.mobile.padding-inline-end})"}, + "margin-inline-start": {"value": "calc(-1 * {oi.app.mobile.padding-inline-start})"} + } + } + } + } +} diff --git a/src/components/buttons/button-modifiers.tokens.json b/src/components/buttons/button-modifiers.tokens.json new file mode 100644 index 0000000..a0976b5 --- /dev/null +++ b/src/components/buttons/button-modifiers.tokens.json @@ -0,0 +1,75 @@ +{ + "of": { + "button": { + "hover": { + "bg": {"value": "#cccccc"}, + "color-border": {"value": "#5e5e5e"} + }, + "active": { + "fg": {"value": "{oi.color.fg}"}, + "bg": {"value": "#bfbfbf"}, + "color-border": {"value": "#5e5e5e"} + }, + "focus": { + "color-border": {"value": "{oi.color.focus.border}"} + }, + "focus-visible": { + "color-border": {"value": "{oi.color.focus.border}"} + }, + + "anchor": { + "hover": { + "bg": {"value": "transparent"}, + "color-border": {"value": "transparent"} + }, + "active": { + "fg": {"value": "#014e74"}, + "bg": {"value": "transparent"}, + "color-border": {"value": "transparent"} + }, + "focus": { + "color-border": {"value": "{oi.color.focus.border}"} + }, + "focus-visible": { + "color-border": {"value": "{oi.color.focus.border}"} + } + }, + + "primary": { + "hover": { + "bg": {"value": "#016698"}, + "color-border": {"value": "#01537c"} + }, + "active": { + "fg": {"value": "#bfbfbf"}, + "bg": {"value": "#01608f"}, + "color-border": {"value": "#01537c"} + }, + "focus": { + "color-border": {"value": "#000000"} + }, + "focus-visible": { + "color-border": {"value": "#000000"} + } + }, + + "danger": { + "hover": { + "bg": {"value": "#aa2218"}, + "color-border": {"value": "#881b13"} + }, + "active": { + "fg": {"value": "#ee837d"}, + "bg": {"value": "#a02017"}, + "color-border": {"value": "#881b13"} + }, + "focus": { + "color-border": {"value": "#000000"} + }, + "focus-visible": { + "color-border": {"value": "#000000"} + } + } + } + } +} diff --git a/src/components/buttons/button.tokens.json b/src/components/buttons/button.tokens.json new file mode 100644 index 0000000..6b7547c --- /dev/null +++ b/src/components/buttons/button.tokens.json @@ -0,0 +1,27 @@ +{ + "of": { + "button": { + "fg": {"value": "{oi.color.fg}"}, + "bg": {"value": "{oi.color.bg}"}, + "color-border": {"value": "{oi.color.border}"}, + + "anchor": { + "fg": {"value": "{utrecht.link.color}"}, + "bg": {"value": "transparent"}, + "color-border": {"value": "transparent"} + }, + + "primary": { + "fg": {"value": "#ffffff"}, + "bg": {"value": "#0177b2"}, + "color-border": {"value": "{oi.color.primary}"} + }, + + "danger": { + "fg": {"value": "#fce9e8"}, + "bg": {"value": "{oi.color.danger}"}, + "color-border": {"value": "#aa2218"} + } + } + } +} diff --git a/src/components/card.tokens.json b/src/components/card.tokens.json new file mode 100644 index 0000000..8850047 --- /dev/null +++ b/src/components/card.tokens.json @@ -0,0 +1,11 @@ +{ + "of": { + "card": { + "background-color": {"value": "{oi.color.bg}"}, + "padding-block-end": {"value": "40px"}, + "padding-block-start": {"value": "40px"}, + "padding-inline-end": {"value": "40px"}, + "padding-inline-start": {"value": "40px"} + } + } +} diff --git a/src/components/checkbox-field.tokens.json b/src/components/checkbox-field.tokens.json new file mode 100644 index 0000000..4cabc1b --- /dev/null +++ b/src/components/checkbox-field.tokens.json @@ -0,0 +1,23 @@ +{ + "of": { + "utrecht-form-field": { + "checkbox": { + "margin-block-start": {"value": "8px"}, + "label": { + "margin-block-end": {"value": 0} + } + } + }, + "utrecht-form-label": { + "checkbox": { + "focus-within": { + "outline": {"value": "1px solid {oi.color.primary}"} + }, + "padding-block-start": {"value": "11px"}, + "padding-block-end": {"value": "11px"}, + "padding-inline-start": {"value": "12px"}, + "padding-inline-end": {"value": "12px"} + } + } + } +} diff --git a/src/components/editgrid.tokens.json b/src/components/editgrid.tokens.json new file mode 100644 index 0000000..182c3e9 --- /dev/null +++ b/src/components/editgrid.tokens.json @@ -0,0 +1,45 @@ +{ + "of": { + "editgrid": { + "$extensions": { + "dte.metadata": { + "groupDescription": "Theming for the editgrid (repeating group) component." + } + }, + + "line-height": {"value": 1.5}, + "gap": { + "value": "8px", + "comment": "Spacing consistent with label (bottom) and help text (top) margins." + }, + + "item": { + "$extensions": { + "dte.metadata": { + "groupDescription": "Tokens for a single item in a repeating group." + } + }, + + "gap": {"value": "12px"}, + "border": {"value": "solid 1px {oi.color.border}"}, + "padding-block-end": {"value": "24px"}, + "padding-block-start": {"value": "24px"}, + "padding-inline-end": {"value": "24px"}, + "padding-inline-start": {"value": "24px"} + }, + + "item-heading": { + "$extensions": { + "dte.metadata": { + "groupDescription": "Appearance of item/group legend/heading." + } + }, + + "font-family": {"value": "{oi.typography.sans-serif.font-family}"}, + "font-size": {"value": "0.875rem"}, + "line-height": {"value": "1.2"}, + "margin-block-end": {"value": "24px"} + } + } + } +} diff --git a/src/components/errors.tokens.json b/src/components/errors.tokens.json new file mode 100644 index 0000000..e5d22b3 --- /dev/null +++ b/src/components/errors.tokens.json @@ -0,0 +1,15 @@ +{ + "of": { + "utrecht-form-field-description": { + "errors": { + "$extensions": { + "dte.metadata": { + "groupDescription": "Open Forms extensions of utrecht-form-field-description (for errors)" + } + }, + "font-weight": {"value": "bold"}, + "line-height": {"value": 1.33} + } + } + } +} diff --git a/src/components/fields/checkbox.tokens.json b/src/components/fields/checkbox.tokens.json new file mode 100644 index 0000000..c8f39d4 --- /dev/null +++ b/src/components/fields/checkbox.tokens.json @@ -0,0 +1,7 @@ +{ + "of": { + "checkbox": { + "bg": {"value": "#F3F3F3"} + } + } +} diff --git a/src/components/fields/cosign.tokens.json b/src/components/fields/cosign.tokens.json new file mode 100644 index 0000000..5740dbe --- /dev/null +++ b/src/components/fields/cosign.tokens.json @@ -0,0 +1,7 @@ +{ + "of": { + "cosign": { + "bg": {"value": "{oi.checkbox.bg}"} + } + } +} diff --git a/src/components/fields/field.tokens.json b/src/components/fields/field.tokens.json new file mode 100644 index 0000000..e749876 --- /dev/null +++ b/src/components/fields/field.tokens.json @@ -0,0 +1,7 @@ +{ + "of": { + "field-border": { + "color": {"value": "#979797"} + } + } +} diff --git a/src/components/fields/fieldset.tokens.json b/src/components/fields/fieldset.tokens.json new file mode 100644 index 0000000..a0cadbf --- /dev/null +++ b/src/components/fields/fieldset.tokens.json @@ -0,0 +1,11 @@ +{ + "of": { + "fieldset": { + "legend": { + "color": { + "value": "{oi.color.primary}" + } + } + } + } +} diff --git a/src/components/fields/file-upload.tokens.json b/src/components/fields/file-upload.tokens.json new file mode 100644 index 0000000..f93c458 --- /dev/null +++ b/src/components/fields/file-upload.tokens.json @@ -0,0 +1,9 @@ +{ + "of": { + "file-upload": { + "drop-area": { + "padding": {"value": "15px"} + } + } + } +} diff --git a/src/components/fields/input.tokens.json b/src/components/fields/input.tokens.json new file mode 100644 index 0000000..5398593 --- /dev/null +++ b/src/components/fields/input.tokens.json @@ -0,0 +1,7 @@ +{ + "of": { + "input": { + "font-weight": {"value": "bold"} + } + } +} diff --git a/src/components/fields/select.tokens.json b/src/components/fields/select.tokens.json new file mode 100644 index 0000000..cc5d6cf --- /dev/null +++ b/src/components/fields/select.tokens.json @@ -0,0 +1,39 @@ +{ + "of": { + "select": { + "$extensions": { + "dte.metadata": { + "groupDescription": "(Deprecated) select component theming." + } + }, + "highlighted": { + "bg": { + "value": "#E6E6E6" + } + } + }, + "select-menu": { + "$extensions": { + "dte.metadata": { + "groupDescription": "Select component theming, partially based on utrecht-select." + } + }, + "background-color": {"value": "{oi.color.bg}"}, + "border": {"value": "solid 1px {oi.color.border}"}, + "border-radius": {"value": "0"}, + "box-shadow": {"value": "0 0 0 1px hsla(0, 0%, 0%, 0.1), 0 4px 11px hsla(0, 0%, 0%, 0.1)"}, + "margin-block-end": {"value": "0"}, + "margin-block-start": {"value": "-1px"}, + "option": { + "font-weight": {"value": "normal"}, + "padding-block-end": {"value": "10px"}, + "padding-block-start": {"value": "10px"}, + "padding-inline-end": {"value": "12px"}, + "padding-inline-start": {"value": "12px"}, + "focus": { + "background-color": {"value": "#E6E6E6"} + } + } + } + } +} diff --git a/src/components/helptext.tokens.json b/src/components/helptext.tokens.json new file mode 100644 index 0000000..bd4c323 --- /dev/null +++ b/src/components/helptext.tokens.json @@ -0,0 +1,23 @@ +{ + "of": { + "helptext": { + "bg": {"value": "#d3e3ec"}, + "fg": {"value": "{oi.color.fg}"} + }, + "utrecht-form-field-description": { + "$extensions": { + "dte.metadata": { + "groupDescription": "Open Forms extensions of utrecht-form-field-description" + } + }, + "background-color": {"value": "#d3e3ec"}, + "border-left": { + "color": {"value": "{oi.color.info}"}, + "width": {"value": "4px"} + }, + "line-height": {"value": "1.5"}, + "padding-block": {"value": "11px"}, + "padding-inline": {"value": "16px"} + } + } +} diff --git a/src/components/input-container.tokens.json b/src/components/input-container.tokens.json new file mode 100644 index 0000000..49d2449 --- /dev/null +++ b/src/components/input-container.tokens.json @@ -0,0 +1,30 @@ +{ + "of": { + "input-container": { + "affix": { + "background-color": {"value": "transparent"}, + "border-color": {"value": "transparent"}, + "border-style": {"value": "none"}, + "border-width": {"value": 0}, + "padding-inline": { + "value": "{utrecht.textbox.padding-inline-start} {utrecht.textbox.padding-inline-end}" + }, + "padding-block": { + "value": "{utrecht.textbox.padding-block-start} {utrecht.textbox.padding-block-end}" + }, + "line-height": {"value": "{utrecht.textbox.line-height}"} + }, + "gap": {}, + "prefix": { + "border-start-start-radius": {}, + "border-end-start-radius": {}, + "margin-inline-end": {} + }, + "suffix": { + "border-start-end-radius": {}, + "border-end-end-radius": {}, + "margin-inline-start": {} + } + } + } +} diff --git a/src/components/input-group.tokens.json b/src/components/input-group.tokens.json new file mode 100644 index 0000000..47933b4 --- /dev/null +++ b/src/components/input-group.tokens.json @@ -0,0 +1,16 @@ +{ + "of": { + "input-group": { + "justify-content": {"value": "flex-start"}, + "align-items": {"value": "center"}, + "gap": {"value": "12px"}, + "invalid": { + "border-inline-start": { + "color": {"value": "transparent"}, + "width": {"value": "0"} + }, + "padding-inline-start": {"value": "0"} + } + } + } +} diff --git a/src/components/label.tokens.json b/src/components/label.tokens.json new file mode 100644 index 0000000..c836db2 --- /dev/null +++ b/src/components/label.tokens.json @@ -0,0 +1,7 @@ +{ + "of": { + "label": { + "font-weight": {"value": "normal"} + } + } +} diff --git a/src/components/language-selection.tokens.json b/src/components/language-selection.tokens.json new file mode 100644 index 0000000..9c2f3dd --- /dev/null +++ b/src/components/language-selection.tokens.json @@ -0,0 +1,17 @@ +{ + "of": { + "language-selection": { + "gap": {"value": ".2em"}, + + "in-app": { + "padding-block-end": {"value": "0"}, + "padding-block-start": {"value": "0"}, + + "mobile": { + "padding-block-end": {"value": "0"}, + "padding-block-start": {"value": "15px"} + } + } + } + } +} diff --git a/src/components/list.tokens.json b/src/components/list.tokens.json new file mode 100644 index 0000000..52707e2 --- /dev/null +++ b/src/components/list.tokens.json @@ -0,0 +1,15 @@ +{ + "of": { + "list": { + "gap": {"value": "20px"}, + + "compact": { + "gap": {"value": "8px"} + }, + + "extra-compact": { + "gap": {"value": "0"} + } + } + } +} diff --git a/src/components/login-button-logo/tokens.json b/src/components/login-button-logo/tokens.json new file mode 100644 index 0000000..0c0ffaf --- /dev/null +++ b/src/components/login-button-logo/tokens.json @@ -0,0 +1,22 @@ +{ + "of": { + "login-button-logo": { + "dark": { + "focus": { + "color-border": {"value": "{oi.color.focus.border}"} + }, + "focus-visible": { + "color-border": {"value": "{oi.color.focus.border}"} + } + }, + "light": { + "focus": { + "color-border": {"value": "#000000"} + }, + "focus-visible": { + "color-border": {"value": "#000000"} + } + } + } + } +} diff --git a/src/components/login-options.tokens.json b/src/components/login-options.tokens.json new file mode 100644 index 0000000..169c87c --- /dev/null +++ b/src/components/login-options.tokens.json @@ -0,0 +1,11 @@ +{ + "of": { + "login-options": { + "cosign": { + "background-color": {"value": "{oi.color.read-only.bg}"}, + "padding-block": {"value": "0.6em"}, + "padding-inline": {"value": "0.6em"} + } + } + } +} diff --git a/src/components/page-footer/tokens.json b/src/components/page-footer/tokens.json new file mode 100644 index 0000000..f7f07c5 --- /dev/null +++ b/src/components/page-footer/tokens.json @@ -0,0 +1,13 @@ +{ + "of": { + "page-footer": { + "$extensions": { + "dte.metadata": { + "groupDescription": "DEPRECATED - use utrecht-page-footer tokens instead." + } + }, + "bg": {"value": "{oi.color.primary}"}, + "fg": {"value": "{oi.color.bg}"} + } + } +} diff --git a/src/components/page-header/logo.tokens.json b/src/components/page-header/logo.tokens.json new file mode 100644 index 0000000..e9fe204 --- /dev/null +++ b/src/components/page-header/logo.tokens.json @@ -0,0 +1,9 @@ +{ + "of": { + "header-logo": { + "url": {"value": "none"}, + "width": {"value": "auto"}, + "height": {"value": "auto"} + } + } +} diff --git a/src/components/page-header/tokens.json b/src/components/page-header/tokens.json new file mode 100644 index 0000000..ed98c6b --- /dev/null +++ b/src/components/page-header/tokens.json @@ -0,0 +1,53 @@ +{ + "of": { + "page-header": { + "$extensions": { + "dte.metadata": { + "groupDescription": "Color/spacing tokens are DEPRECATED - use utrecht-page-header tokens instead." + } + }, + + "bg": {"value": "#ffffff"}, + "mobile": { + "padding": {"value": "10px 15px 10px 10px"} + }, + "tablet": { + "padding": {"value": "{oi.text.tablet.margin}"} + }, + "laptop": { + "padding": {"value": "{oi.text.laptop.margin}"} + }, + "desktop": { + "padding": {"value": "{oi.text.desktop.margin}"} + }, + + "logo-return-url": { + "$extensions": { + "dte.metadata": { + "groupDescription": "Open Forms extension for logo in the header." + } + }, + + "min-height": { + "value": "50px", + "comment": "DEPRECATED - use min-block-size instead." + }, + "min-width": { + "value": "100px", + "comment": "DEPRECATED - use min-inline-size instead." + }, + + "min-block-size": {"value": "{oi.page-header.logo-return-url.min-height}"}, + "min-inline-size": {"value": "{oi.page-header.logo-return-url.min-width}"}, + + "mobile": { + "min-height": {"value": "25px"}, + "min-width": {"value": "50px"}, + + "min-block-size": {"value": "{oi.page-header.logo-return-url.mobile.min-height}"}, + "min-inline-size": {"value": "{oi.page-header.logo-return-url.mobile.min-width}"} + } + } + } + } +} diff --git a/src/components/progress-indicator.tokens.json b/src/components/progress-indicator.tokens.json new file mode 100644 index 0000000..2e0e11f --- /dev/null +++ b/src/components/progress-indicator.tokens.json @@ -0,0 +1,44 @@ +{ + "of": { + "progress-indicator": { + "background-color": {"value": "{oi.color.bg}"}, + "inset-block-start": {"value": "{oi.app.grid-column-gap}"}, + "mobile": { + "box-shadow": {"value": "0px 0px 2px 0px rgba(0, 0, 0, 0.2)"}, + "padding-block-end": {"value": "15px"}, + "padding-block-start": {"value": "15px"}, + "padding-inline-end": {"value": "15px"}, + "padding-inline-start": {"value": "15px"} + }, + "mobile-header": { + "color": {"value": "inherit"}, + "font-family": {"value": "{oi.typography.sans-serif.font-family}"}, + "font-size": {"value": "1.125rem"}, + "gap": {"value": "0px"}, + "icon": { + "flex-basis": {"value": "30px"} + }, + "line-height": {"value": "1.1333"} + }, + "nav": { + "gap": { + "comment": "Spacing between title and link list.", + "value": "20px" + }, + "mobile": { + "list": { + "gap": {"value": "15px"} + }, + "padding-block-end": {"value": "15px"}, + "padding-block-start": {"value": "15px"}, + "padding-inline-end": {"value": "15px"}, + "padding-inline-start": {"value": "15px"} + } + }, + "padding-block-end": {"value": "40px"}, + "padding-block-start": {"value": "40px"}, + "padding-inline-end": {"value": "40px"}, + "padding-inline-start": {"value": "40px"} + } + } +} diff --git a/src/components/radio-field.tokens.json b/src/components/radio-field.tokens.json new file mode 100644 index 0000000..487a1d4 --- /dev/null +++ b/src/components/radio-field.tokens.json @@ -0,0 +1,23 @@ +{ + "of": { + "utrecht-form-field": { + "radio": { + "margin-block-start": {"value": "8px"}, + "label": { + "margin-block-end": {"value": 0} + } + } + }, + "utrecht-form-label": { + "radio": { + "focus-within": { + "outline": {"value": "1px solid {oi.color.primary}"} + }, + "padding-block-start": {"value": "11px"}, + "padding-block-end": {"value": "11px"}, + "padding-inline-start": {"value": "12px"}, + "padding-inline-end": {"value": "12px"} + } + } + } +} diff --git a/src/components/summary-row/summary-row.tokens.json b/src/components/summary-row/summary-row.tokens.json new file mode 100644 index 0000000..3bdcb95 --- /dev/null +++ b/src/components/summary-row/summary-row.tokens.json @@ -0,0 +1,9 @@ +{ + "of": { + "summary-row": { + "spacing": { + "value": "10px" + } + } + } +} diff --git a/src/components/tooltip.tokens.json b/src/components/tooltip.tokens.json new file mode 100644 index 0000000..26af0f3 --- /dev/null +++ b/src/components/tooltip.tokens.json @@ -0,0 +1,26 @@ +{ + "of": { + "tooltip": { + "arrow": { + "color": {"value": "#ae9e49"}, + "height": {"value": "16px"}, + "width": {"value": "8px"} + }, + "background-color": {"value": "#fff3cd"}, + "border-color": {"value": "{oi.tooltip.arrow.color}"}, + "border-width": {"value": "1px"}, + "box-shadow": { + "value": "1px 0 0 #e6e6e6, -1px 0 0 #e6e6e6, 0 1px 0 #e6e6e6, 0 -1px 0 #e6e6e6, 0 3px 13px rgba(0, 0, 0, 0.08)" + }, + "font-size": {"value": "1rem"}, + "offset": {"value": "10px"}, + "padding-block-end": {"value": "6px"}, + "padding-block-start": {"value": "6px"}, + "padding-inline-end": {"value": "12px"}, + "padding-inline-start": {"value": "12px"} + }, + "tooltip-icon": { + "color": {"value": "{oi.color.fg-muted}"} + } + } +} diff --git a/style-dictionary.config.json b/style-dictionary.config.json new file mode 100644 index 0000000..09aa4f9 --- /dev/null +++ b/style-dictionary.config.json @@ -0,0 +1,49 @@ +{ + "source": [ + "./src/**/tokens.json", + "./src/**/*.tokens.json" + ], + "platforms": { + "css-theme": { + "transforms": ["attribute/cti", "name/cti/kebab", "color/hsl-4"], + "buildPath": "dist/", + "files": [ + { + "destination": "index.css", + "format": "css/variables", + "options": { + "selector": ".openinwoner-theme", + "outputReferences": true + } + } + ] + }, + "scss": { + "transforms": ["attribute/cti", "name/cti/kebab", "color/hsl-4"], + "buildPath": "dist/", + "files": [ + { + "destination": "_variables.scss", + "format": "scss/variables", + "options": { + "outputReferences": true + } + } + ] + }, + "js": { + "transforms": ["attribute/cti", "name/cti/camel", "color/hsl-4"], + "buildPath": "dist/", + "files": [ + { + "destination": "index.js", + "format": "javascript/es6" + }, + { + "destination": "tokens.js", + "format": "javascript/module" + } + ] + } + } +}