From ea4cc6bae56d8f13d0f55e458425daa461f258c0 Mon Sep 17 00:00:00 2001
From: Jean-Baptiste Pasquier <contact@jbpasquier.eu>
Date: Thu, 4 Jan 2024 16:04:28 +0100
Subject: [PATCH] fix path + materialize + first draft producers

---
 index.html                                 | 55 ++++++++------
 package-lock.json                          | 12 ++++
 package.json                               |  2 +
 public/api/producer/rec2aFRu0H3Czf2IG.json |  2 +-
 public/api/producer/rec64TU56RNMKfG8d.json |  2 +-
 public/api/producer/recALjpHmGmqsXpaW.json |  2 +-
 public/api/producer/recHYLgKXBhtgemfb.json |  2 +-
 public/api/producer/recIwhSu2iJRTJdIn.json |  2 +-
 public/api/producer/recSrhBnWnzkFRS3y.json |  2 +-
 public/api/producer/recVIrkdXWbRzs8IQ.json |  2 +-
 public/api/producer/recW1epOZsVUhJvRI.json |  2 +-
 public/api/producer/recXJrzz9mquDaCv7.json |  2 +-
 public/api/producer/recaaryaB0oaTKamH.json |  2 +-
 public/api/producer/recjBYlXskXtilPBC.json |  2 +-
 public/api/producer/recrIQDQMQpTODtjB.json |  2 +-
 public/api/producer/rectRZksVDjV0Pdlk.json |  2 +-
 public/api/producer/reczDHQn85Y3fvHKK.json |  2 +-
 src/solid-ofn-rpp.js                       | 83 ++++++++++++++++++----
 src/styles/index.scss                      | 50 +++++++++++++
 src/utils.js                               | 27 +++++--
 vite.config.js                             |  7 ++
 21 files changed, 210 insertions(+), 54 deletions(-)

diff --git a/index.html b/index.html
index 1b65b9e..c31b98c 100644
--- a/index.html
+++ b/index.html
@@ -18,28 +18,39 @@
     <script type="module" src="./src/index.js"></script>
   </head>
   <body>
-    <ul>
-      <li>
-        <solid-link next="regenerative-produce-portal-producers-list">
-          <icon-mdi-account-box></icon-mdi-account-box> Producers List
-        </solid-link>
-      </li>
-      <li>
-        <solid-link next="regenerative-produce-portal-products-list">
-          Products List
-        </solid-link>
-      </li>
-      <li>
-        <solid-link next="regenerative-produce-portal-producer-details" data-src="http://localhost:5173/api/producer/rec2aFRu0H3Czf2IG.json">
-          Producer Details
-        </solid-link>
-      </li>
-      <li>
-        <solid-link next="regenerative-produce-portal-product-details" data-src="http://localhost:5173/api/product/rec07CR18S2eerIyc.json">
-          Product Details
-        </solid-link>
-      </li>
-    </ul>
+    <nav>
+      <div class="nav-wrapper">
+        <a href="#" class="brand-logo">Examples</a>
+        <ul class="right">
+          <li>
+            <solid-link next="regenerative-produce-portal-producers-list">
+              <a><icon-mdi-home-silo></icon-mdi-home-silo> Producers List</a>
+            </solid-link>
+          </li>
+          <li>
+            <solid-link next="regenerative-produce-portal-products-list">
+              <a><icon-mdi-food-apple></icon-mdi-food-apple> Products List</a>
+            </solid-link>
+          </li>
+          <li>
+            <solid-link
+              next="regenerative-produce-portal-producer-details"
+              data-src="http://localhost:5173/api/producer/recXJrzz9mquDaCv7.json"
+            >
+              <a><icon-mdi-home-silo></icon-mdi-home-silo> Producer Details</a>
+            </solid-link>
+          </li>
+          <li>
+            <solid-link
+              next="regenerative-produce-portal-product-details"
+              data-src="http://localhost:5173/api/product/rec07CR18S2eerIyc.json"
+            >
+              <a><icon-mdi-food-apple></icon-mdi-food-apple> Product Details</a>
+            </solid-link>
+          </li>
+        </ul>
+      </div>
+    </nav>
     <solid-ofn-rpp
       producers-src="http://localhost:5173/api/producers.json"
       products-src="http://localhost:5173/api/products.json"
diff --git a/package-lock.json b/package-lock.json
index 7f41ae3..5ca671d 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -9,9 +9,11 @@
       "version": "0.1.0",
       "license": "MIT",
       "dependencies": {
+        "@fontsource/open-sans": "^5.0.20",
         "@iconify-json/mdi": "^1.1.64",
         "autoprefixer": "^10.4.16",
         "cssnano": "^6.0.2",
+        "materialize-css": "^1.0.0-rc.2",
         "postcss": "^8.4.32",
         "postcss-preset-env": "^9.3.0",
         "postcss-scss": "^4.0.9",
@@ -1230,6 +1232,11 @@
         "node": ">=12"
       }
     },
+    "node_modules/@fontsource/open-sans": {
+      "version": "5.0.20",
+      "resolved": "https://registry.npmjs.org/@fontsource/open-sans/-/open-sans-5.0.20.tgz",
+      "integrity": "sha512-Tgdqmp9QX8YZd5TO+rEv5n5cZkTaDf0I0eHUHMe3xKxUgGR/9uKS7VYL+kiVZfMNZ/8EyMLwzcNFWVsNG6nZAg=="
+    },
     "node_modules/@iconify-json/mdi": {
       "version": "1.1.64",
       "resolved": "https://registry.npmjs.org/@iconify-json/mdi/-/mdi-1.1.64.tgz",
@@ -2175,6 +2182,11 @@
       "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
       "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ=="
     },
+    "node_modules/materialize-css": {
+      "version": "1.0.0-rc.2",
+      "resolved": "https://registry.npmjs.org/materialize-css/-/materialize-css-1.0.0-rc.2.tgz",
+      "integrity": "sha512-FuQmSyq4Qv0ov7A2qXw0E6/jbQzSWx2P1pg2/XQDYTkkSc/GyiFAxu3fw9zgShwuTvyumEiw5jkxQWT9siqMBQ=="
+    },
     "node_modules/mdn-data": {
       "version": "2.0.30",
       "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz",
diff --git a/package.json b/package.json
index 3aca86b..e9546c5 100644
--- a/package.json
+++ b/package.json
@@ -54,9 +54,11 @@
     "last 2 Chrome versions"
   ],
   "dependencies": {
+    "@fontsource/open-sans": "^5.0.20",
     "@iconify-json/mdi": "^1.1.64",
     "autoprefixer": "^10.4.16",
     "cssnano": "^6.0.2",
+    "materialize-css": "^1.0.0-rc.2",
     "postcss": "^8.4.32",
     "postcss-preset-env": "^9.3.0",
     "postcss-scss": "^4.0.9",
diff --git a/public/api/producer/rec2aFRu0H3Czf2IG.json b/public/api/producer/rec2aFRu0H3Czf2IG.json
index 682bf28..7a62bf3 100644
--- a/public/api/producer/rec2aFRu0H3Czf2IG.json
+++ b/public/api/producer/rec2aFRu0H3Czf2IG.json
@@ -1,7 +1,7 @@
 {
   "@id": "http://localhost:5173/api/producer/rec2aFRu0H3Czf2IG.json",
   "@type": "dfc-b:Enterprise",
-  "dfc-b:hasAddress": "http://localhost:5173/api/addresses/rec2aFRu0H3Czf2IG.json",
+  "dfc-b:hasAddress": {"@id":"http://localhost:5173/api/addresses/rec2aFRu0H3Czf2IG.json"},
   "dfc-b:websitePage": "grazedandgrown.com.au",
   "dfc-b:hasSocialMedia": {
     "@id": "#",
diff --git a/public/api/producer/rec64TU56RNMKfG8d.json b/public/api/producer/rec64TU56RNMKfG8d.json
index 10bc811..a10ddf1 100644
--- a/public/api/producer/rec64TU56RNMKfG8d.json
+++ b/public/api/producer/rec64TU56RNMKfG8d.json
@@ -1,7 +1,7 @@
 {
   "@id": "http://localhost:5173/api/producer/rec64TU56RNMKfG8d.json",
   "@type": "dfc-b:Enterprise",
-  "dfc-b:hasAddress": "http://localhost:5173/api/addresses/rec64TU56RNMKfG8d.json",
+  "dfc-b:hasAddress": {"@id":"http://localhost:5173/api/addresses/rec64TU56RNMKfG8d.json"},
   "dfc-b:email": "hello@commongroundproject.com.au",
   "dfc-b:websitePage": "www.commongroundproject.com.au",
   "dfc-b:hasSocialMedia": {
diff --git a/public/api/producer/recALjpHmGmqsXpaW.json b/public/api/producer/recALjpHmGmqsXpaW.json
index 03cb693..42f87db 100644
--- a/public/api/producer/recALjpHmGmqsXpaW.json
+++ b/public/api/producer/recALjpHmGmqsXpaW.json
@@ -1,7 +1,7 @@
 {
   "@id": "http://localhost:5173/api/producer/recALjpHmGmqsXpaW.json",
   "@type": "dfc-b:Enterprise",
-  "dfc-b:hasAddress": "http://localhost:5173/api/addresses/recALjpHmGmqsXpaW.json",
+  "dfc-b:hasAddress": {"@id":"http://localhost:5173/api/addresses/recALjpHmGmqsXpaW.json"},
   "dfc-b:websitePage": "",
   "dfc-b:hasSocialMedia": {
     "@id": "#",
diff --git a/public/api/producer/recHYLgKXBhtgemfb.json b/public/api/producer/recHYLgKXBhtgemfb.json
index b8ecf5c..4abf820 100644
--- a/public/api/producer/recHYLgKXBhtgemfb.json
+++ b/public/api/producer/recHYLgKXBhtgemfb.json
@@ -1,7 +1,7 @@
 {
   "@id": "http://localhost:5173/api/producer/recHYLgKXBhtgemfb.json",
   "@type": "dfc-b:Enterprise",
-  "dfc-b:hasAddress": "http://localhost:5173/api/addresses/recHYLgKXBhtgemfb.json",
+  "dfc-b:hasAddress": {"@id":"http://localhost:5173/api/addresses/recHYLgKXBhtgemfb.json"},
   "dfc-b:websitePage": "www.handfortheland.com",
   "dfc-b:hasSocialMedia": {
     "@id": "#",
diff --git a/public/api/producer/recIwhSu2iJRTJdIn.json b/public/api/producer/recIwhSu2iJRTJdIn.json
index 6361fec..cde66e2 100644
--- a/public/api/producer/recIwhSu2iJRTJdIn.json
+++ b/public/api/producer/recIwhSu2iJRTJdIn.json
@@ -1,7 +1,7 @@
 {
   "@id": "http://localhost:5173/api/producer/recIwhSu2iJRTJdIn.json",
   "@type": "dfc-b:Enterprise",
-  "dfc-b:hasAddress": "http://localhost:5173/api/addresses/recIwhSu2iJRTJdIn.json",
+  "dfc-b:hasAddress": {"@id":"http://localhost:5173/api/addresses/recIwhSu2iJRTJdIn.json"},
   "dfc-b:websitePage": "thestillroom.com.au",
   "dfc-b:hasSocialMedia": {
     "@id": "#",
diff --git a/public/api/producer/recSrhBnWnzkFRS3y.json b/public/api/producer/recSrhBnWnzkFRS3y.json
index 597150c..5281be4 100644
--- a/public/api/producer/recSrhBnWnzkFRS3y.json
+++ b/public/api/producer/recSrhBnWnzkFRS3y.json
@@ -1,7 +1,7 @@
 {
   "@id": "http://localhost:5173/api/producer/recSrhBnWnzkFRS3y.json",
   "@type": "dfc-b:Enterprise",
-  "dfc-b:hasAddress": "http://localhost:5173/api/addresses/recSrhBnWnzkFRS3y.json",
+  "dfc-b:hasAddress": {"@id":"http://localhost:5173/api/addresses/recSrhBnWnzkFRS3y.json"},
   "dfc-b:hasSocialMedia": {
     "@id": "#",
     "@type": "ldp:Container",
diff --git a/public/api/producer/recVIrkdXWbRzs8IQ.json b/public/api/producer/recVIrkdXWbRzs8IQ.json
index af54bb7..6eed057 100644
--- a/public/api/producer/recVIrkdXWbRzs8IQ.json
+++ b/public/api/producer/recVIrkdXWbRzs8IQ.json
@@ -1,7 +1,7 @@
 {
   "@id": "http://localhost:5173/api/producer/recVIrkdXWbRzs8IQ.json",
   "@type": "dfc-b:Enterprise",
-  "dfc-b:hasAddress": "http://localhost:5173/api/addresses/recVIrkdXWbRzs8IQ.json",
+  "dfc-b:hasAddress": {"@id":"http://localhost:5173/api/addresses/recVIrkdXWbRzs8IQ.json"},
   "dfc-b:hasPhoneNumber": "0427229322",
   "dfc-b:email": "geoff@geoffthechef.com.au",
   "dfc-b:websitePage": "",
diff --git a/public/api/producer/recW1epOZsVUhJvRI.json b/public/api/producer/recW1epOZsVUhJvRI.json
index 84bf9f2..5c5151c 100644
--- a/public/api/producer/recW1epOZsVUhJvRI.json
+++ b/public/api/producer/recW1epOZsVUhJvRI.json
@@ -1,7 +1,7 @@
 {
   "@id": "http://localhost:5173/api/producer/recW1epOZsVUhJvRI.json",
   "@type": "dfc-b:Enterprise",
-  "dfc-b:hasAddress": "http://localhost:5173/api/addresses/recW1epOZsVUhJvRI.json",
+  "dfc-b:hasAddress": {"@id":"http://localhost:5173/api/addresses/recW1epOZsVUhJvRI.json"},
   "dfc-b:email": "murrnong@gmail.com",
   "dfc-b:websitePage": "www.murrnong.com",
   "dfc-b:hasSocialMedia": {
diff --git a/public/api/producer/recXJrzz9mquDaCv7.json b/public/api/producer/recXJrzz9mquDaCv7.json
index 04da8a3..2794f01 100644
--- a/public/api/producer/recXJrzz9mquDaCv7.json
+++ b/public/api/producer/recXJrzz9mquDaCv7.json
@@ -1,7 +1,7 @@
 {
   "@id": "http://localhost:5173/api/producer/recXJrzz9mquDaCv7.json",
   "@type": "dfc-b:Enterprise",
-  "dfc-b:hasAddress": "http://localhost:5173/api/addresses/recXJrzz9mquDaCv7.json",
+  "dfc-b:hasAddress": {"@id":"http://localhost:5173/api/addresses/recXJrzz9mquDaCv7.json"},
   "dfc-b:email": "hello@farmingforgood.com.au",
   "dfc-b:websitePage": "farmingforgood.com.au",
   "dfc-b:hasSocialMedia": {
diff --git a/public/api/producer/recaaryaB0oaTKamH.json b/public/api/producer/recaaryaB0oaTKamH.json
index 17a39a7..06b63a6 100644
--- a/public/api/producer/recaaryaB0oaTKamH.json
+++ b/public/api/producer/recaaryaB0oaTKamH.json
@@ -1,7 +1,7 @@
 {
   "@id": "http://localhost:5173/api/producer/recaaryaB0oaTKamH.json",
   "@type": "dfc-b:Enterprise",
-  "dfc-b:hasAddress": "http://localhost:5173/api/addresses/recaaryaB0oaTKamH.json",
+  "dfc-b:hasAddress": {"@id":"http://localhost:5173/api/addresses/recaaryaB0oaTKamH.json"},
   "dfc-b:hasSocialMedia": {
     "@id": "#",
     "@type": "ldp:Container",
diff --git a/public/api/producer/recjBYlXskXtilPBC.json b/public/api/producer/recjBYlXskXtilPBC.json
index 6291797..99daabb 100644
--- a/public/api/producer/recjBYlXskXtilPBC.json
+++ b/public/api/producer/recjBYlXskXtilPBC.json
@@ -1,7 +1,7 @@
 {
   "@id": "http://localhost:5173/api/producer/recjBYlXskXtilPBC.json",
   "@type": "dfc-b:Enterprise",
-  "dfc-b:hasAddress": "http://localhost:5173/api/addresses/recjBYlXskXtilPBC.json",
+  "dfc-b:hasAddress": {"@id":"http://localhost:5173/api/addresses/recjBYlXskXtilPBC.json"},
   "dfc-b:email": "kirsten.larsen76+farm@gmail.com",
   "dfc-b:websitePage": "",
   "dfc-b:hasSocialMedia": {
diff --git a/public/api/producer/recrIQDQMQpTODtjB.json b/public/api/producer/recrIQDQMQpTODtjB.json
index 6183258..2973557 100644
--- a/public/api/producer/recrIQDQMQpTODtjB.json
+++ b/public/api/producer/recrIQDQMQpTODtjB.json
@@ -1,7 +1,7 @@
 {
   "@id": "http://localhost:5173/api/producer/recrIQDQMQpTODtjB.json",
   "@type": "dfc-b:Enterprise",
-  "dfc-b:hasAddress": "http://localhost:5173/api/addresses/recrIQDQMQpTODtjB.json",
+  "dfc-b:hasAddress": {"@id":"http://localhost:5173/api/addresses/recrIQDQMQpTODtjB.json"},
   "dfc-b:websitePage": "reedycreekprovidore.au",
   "dfc-b:hasSocialMedia": {
     "@id": "#",
diff --git a/public/api/producer/rectRZksVDjV0Pdlk.json b/public/api/producer/rectRZksVDjV0Pdlk.json
index dee7915..868b094 100644
--- a/public/api/producer/rectRZksVDjV0Pdlk.json
+++ b/public/api/producer/rectRZksVDjV0Pdlk.json
@@ -1,7 +1,7 @@
 {
   "@id": "http://localhost:5173/api/producer/rectRZksVDjV0Pdlk.json",
   "@type": "dfc-b:Enterprise",
-  "dfc-b:hasAddress": "http://localhost:5173/api/addresses/rectRZksVDjV0Pdlk.json",
+  "dfc-b:hasAddress": {"@id":"http://localhost:5173/api/addresses/rectRZksVDjV0Pdlk.json"},
   "dfc-b:websitePage": "www.cockatoocreekfarm.com.au",
   "dfc-b:hasSocialMedia": {
     "@id": "#",
diff --git a/public/api/producer/reczDHQn85Y3fvHKK.json b/public/api/producer/reczDHQn85Y3fvHKK.json
index ec59fda..d8264dc 100644
--- a/public/api/producer/reczDHQn85Y3fvHKK.json
+++ b/public/api/producer/reczDHQn85Y3fvHKK.json
@@ -1,7 +1,7 @@
 {
   "@id": "http://localhost:5173/api/producer/reczDHQn85Y3fvHKK.json",
   "@type": "dfc-b:Enterprise",
-  "dfc-b:hasAddress": "http://localhost:5173/api/addresses/reczDHQn85Y3fvHKK.json",
+  "dfc-b:hasAddress": {"@id":"http://localhost:5173/api/addresses/reczDHQn85Y3fvHKK.json"},
   "dfc-b:websitePage": "www.bellobeef.com.au",
   "dfc-b:hasSocialMedia": {
     "@id": "#",
diff --git a/src/solid-ofn-rpp.js b/src/solid-ofn-rpp.js
index a7388b4..ab77bf6 100644
--- a/src/solid-ofn-rpp.js
+++ b/src/solid-ofn-rpp.js
@@ -1,7 +1,28 @@
 import style from './styles/index.scss?inline';
-import '~icons/mdi/account-box';
+// import 'materialize-css/dist/js/materialize.min.js'; // Not required
+import '~icons/mdi/home-silo';
+import '~icons/mdi/food-apple';
 import('./utils.js').then(utils => {
   import(/* @vite-ignore */utils.coreVersion()).then(core => {
+
+    // Custom widget for producer description, original contains some unsafe html
+    customElements.define("safe-html-value",
+      class extends core.SolidTemplateElement {
+        constructor() {
+          super();
+        }
+        static get propsDefinition() {
+          return {
+            value: "value"
+          };
+        }
+        template({
+          value
+        }) {
+          return utils.truncate(utils.sanitize(value), 125);
+        }
+      });
+
     customElements.define(
       "solid-ofn-rpp",
       class extends core.SolidTemplateElement {
@@ -21,20 +42,21 @@ import('./utils.js').then(utils => {
         styles() {
           let render = `
           <style>${style}</style>
+          <script id="client-context" type="application/ld+json" data-default-context>
+            ${JSON.stringify(utils.CLIENT_CONTEXT)}
+          </script>
           `;
           return render;
         }
 
         routers() {
           let render = `
-          <nav id="${this.uniq}-nav">
-            <solid-router default-route="${this.route}-producers-list">
-                <solid-route name="${this.route}-producers-list"></solid-route>
-                <solid-route name="${this.route}-products-list"></solid-route>
-                <solid-route name="${this.route}-producer-details" use-id></solid-route>
-                <solid-route name="${this.route}-product-details" use-id></solid-route>
-            </solid-router>
-          </nav>
+          <solid-router default-route="${this.route}-producers-list">
+            <solid-route name="${this.route}-producers-list"></solid-route>
+            <solid-route name="${this.route}-products-list"></solid-route>
+            <solid-route name="${this.route}-producer-details" use-id></solid-route>
+            <solid-route name="${this.route}-product-details" use-id></solid-route>
+          </solid-router>
           `;
           return render;
         }
@@ -46,10 +68,45 @@ import('./utils.js').then(utils => {
 
         viewProducersList(props={}) {
           let render = `
-            <div id="${this.route}-producers-list" data-view="${this.route}-producers-list">
-              <solid-display
-                data-src="${this.producersSrc}"
-              ></solid-display>
+            <div id="${this.route}-producers-list" data-view="${this.route}-producers-list" class="row">
+              <div class="col s4"></div>
+              <div class="col s8">
+                <solid-display
+                  data-src="${this.producersSrc}"
+                  fields="set-card-row(set-card-col(set-card-panel(set-card-wrapper(set-left-panel(ofn:logo_url), set-right-panel(set-title(dfc-b:name, dfc-b:hasAddress.dfc-b:hasCity), set-description(ofn:long_description), set-tags(ofn:First_Nations_country, ofn:Produce_category))))))"
+
+                  widget-set-card-row="div"
+                  class-set-card-row="row"
+                  widget-set-card-col="div"
+                  class-set-card-col="col s12"
+                  widget-set-card-panel="div"
+                  class-set-card-panel="card-panel z-depth-1"
+                  widget-set-card-wrapper="div"
+                  class-set-card-wrapper="row valign-wrapper"
+
+                  widget-set-left-panel="div"
+                  class-set-left-panel="col s2"
+                  class-ofn:logo_url="responsive-img"
+                  widget-ofn:logo_url="solid-display-img"
+                  default-ofn:logo_url="https://placehold.co/120"
+
+                  widget-set-right-panel="div"
+                  class-set-right-panel="col s10"
+
+                  widget-set-title="div"
+                  widget-dfc-b:name="solid-display-value"
+                  class-dfc-b:name="dfc_b_name bold"
+                  widget-dfc-b:hasAddress.dfc-b:hasCity="solid-display-value"
+
+                  widget-set-description="div"
+                  widget-ofn:long_description="safe-html-value"
+
+                  widget-set-tags="div"
+                  widget-ofn:First_Nations_country="solid-display-value"
+                  widget-ofn:Produce_category="solid-display-value"
+
+                  ></solid-display>
+                </div>
             </div>
           `;
           return render;
diff --git a/src/styles/index.scss b/src/styles/index.scss
index 9f44090..f7a8327 100644
--- a/src/styles/index.scss
+++ b/src/styles/index.scss
@@ -1 +1,51 @@
 @charset "UTF-8";
+
+// Pre-requisites
+@import "@fontsource/open-sans";
+@import "materialize-css/sass/components/color-variables";
+@import "materialize-css/sass/components/color-classes";
+@import "materialize-css/sass/components/variables";
+@import "materialize-css/sass/components/normalize";
+@import "materialize-css/sass/components/global";
+
+// Optionals
+// @import "materialize-css/sass/components/badges";
+// @import "materialize-css/sass/components/icons-material-design";
+@import "materialize-css/sass/components/grid";
+@import "materialize-css/sass/components/navbar";
+@import "materialize-css/sass/components/typography";
+// @import "materialize-css/sass/components/transitions";
+@import "materialize-css/sass/components/cards";
+// @import "materialize-css/sass/components/toast";
+// @import "materialize-css/sass/components/tabs";
+// @import "materialize-css/sass/components/tooltip";
+@import "materialize-css/sass/components/buttons";
+// @import "materialize-css/sass/components/dropdown";
+// @import "materialize-css/sass/components/waves";
+// @import "materialize-css/sass/components/modal";
+// @import "materialize-css/sass/components/collapsible";
+// @import "materialize-css/sass/components/chips";
+// @import "materialize-css/sass/components/materialbox";
+// @import "materialize-css/sass/components/forms/forms";
+// @import "materialize-css/sass/components/table_of_contents";
+// @import "materialize-css/sass/components/sidenav";
+// @import "materialize-css/sass/components/preloader";
+// @import "materialize-css/sass/components/slider";
+// @import "materialize-css/sass/components/carousel";
+// @import "materialize-css/sass/components/tapTarget";
+// @import "materialize-css/sass/components/pulse";
+// @import "materialize-css/sass/components/datepicker";
+// @import "materialize-css/sass/components/timepicker";
+
+:root {
+    font-family: Open Sans, sans-serif;  
+}
+
+.dfc_b_name {
+    display: inline-block;
+    font-size: 19px;
+    font-weight: 600;
+    line-height: 25px;
+    letter-spacing: -0.022em;
+    text-align: left;
+}
diff --git a/src/utils.js b/src/utils.js
index cac660d..21c7f24 100644
--- a/src/utils.js
+++ b/src/utils.js
@@ -1,4 +1,4 @@
-const componentName = 'ofn-rpp';
+const componentName = "ofn-rpp";
 
 export function path() {
   let path = ".";
@@ -16,14 +16,31 @@ export function uniq() {
 
 export const CLIENT_CONTEXT = {
   "@vocab": "",
-  "dfc": "dfc",
-  "dc": "dc",
+  dfc: "dfc",
+  dc: "dc",
   "dfc-b": "dfc-b",
   "dfc-p": "dfc-p",
   "dfc-t": "dfc-t",
   "dfc-m": "dfc-m",
   "dfc-pt": "dfc-p",
   "dfc-f": "dfc-f",
-  "ontosec": "ontosec",
-  "name": "name"
+  ontosec: "ontosec",
+  name: "name",
+};
+
+export const sanitize = (input) => {
+  const tmp = document.createElement("div");
+  tmp.innerHTML = input;
+  return tmp.textContent || tmp.innerText || "";
+};
+
+export const truncate = (str, length) => {
+  if (str.length > length) {
+    const lastSpaceIndex = str.substr(0, length).lastIndexOf(" ");
+    str =
+      lastSpaceIndex !== -1
+        ? str.substr(0, lastSpaceIndex) + "..."
+        : str.substr(0, length) + "...";
+  }
+  return str;
 };
diff --git a/vite.config.js b/vite.config.js
index 2a4f646..eefc63c 100644
--- a/vite.config.js
+++ b/vite.config.js
@@ -3,6 +3,13 @@ import { defineConfig } from 'vite'
 import Icons from 'unplugin-icons/vite'
 
 export default defineConfig({
+  css: {
+    preprocessorOptions: {
+      scss: {
+        quietDeps: true
+      }
+    }
+  },
   build: {
     lib: {
       entry: resolve(__dirname, 'src/index.js'),
-- 
GitLab