{"id":170,"date":"2020-02-29T14:27:00","date_gmt":"2020-02-29T14:27:00","guid":{"rendered":"https:\/\/blogs.zeiss.com\/intern\/tech\/?p=170"},"modified":"2020-02-24T10:40:46","modified_gmt":"2020-02-24T10:40:46","slug":"precise-ui","status":"publish","type":"post","link":"https:\/\/blogs.zeiss.com\/tech\/precise-ui\/","title":{"rendered":"Precise UI"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Introduction to Precise UI<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Why we developed Precise UI<\/h3>\n\n\n\n<p>Few years ago we started working on Digital Customer Companion, which is an online portal for customers of Zeiss. It was a greenfield project, where we were laying foundation for one of the core digital products at Zeiss.<\/p>\n\n\n\n<p>From initial design prototypes it was clear, that existing component libraries or frameworks like Bootstrap or Material Design either were too generic or had very strong design language, that redesigning it didn\u2019t make sense. In addition, those frameworks and component libraries offered simple components, which meant they were only basic building blocks. Hence, Precise UI was created.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">What is Precise UI<\/h3>\n\n\n\n<p>Precise UI is an extensive React component library based on design language of Zeiss brand. It is created with styled components and Typescript. Currently, Precise UI offers more than 75 components, and more components are planned.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How to use Precise UI<\/h2>\n\n\n\n<p>To start using Precise UI, you just need to install the package with <code>npm<\/code> or <code>yarn<\/code><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>npm install precise-ui<\/code><\/pre>\n\n\n\n<p>or<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>yarn add precise-ui<\/code><\/pre>\n\n\n\n<p> As Precise UI is built with React and styled-components, they need to be installed as well <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>npm i react@16 styled-components@4<\/code><\/pre>\n\n\n\n<p>Once project is set up and dependencies are installed, simplest app can be as below <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import * as React from 'react';\nimport { render } from 'react-dom';\nimport { Button, PageHead, Container } from 'precise-ui';\n\nimport '.\/styles.css';\n\nfunction App() {\n  return (\n    &lt;Container>\n      &lt;PageHead title=\"Hello, Precise\" \/>\n      &lt;Button onClick={() => alert('hello')}>Text&lt;\/Button>\n    &lt;\/Container>\n  );\n}\n\nconst rootElement = document.getElementById('root');\nrender(&lt;App \/>, rootElement);\n\n\/\/render codesandbox app\n![alt][\/img\/initial.png]<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Styling<\/h3>\n\n\n\n<p>As already mentioned, Precise UI uses styled components underneath. On top of that, styled components exposes it&#8217;s own version of <code>styled<\/code> from <code>styled-components<\/code>, that has additional functionality to make it easier to use theme variables of Precise UI.<\/p>\n\n\n\n<p>Example below changes color of the link to primary and secondary colors of the theme.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import { styled, themed, ActionLink, getFontSize } from 'precise-ui';\n\nconst StyledActionLink = styled(ActionLink)`\n  ${themed(\n    ({ theme }) => `\n    color: ${theme.primary};\n    ${getFontSize('xSmall')}\n    &amp;:hover{\n      ${getFontSize('xLarge')}\n      color: ${theme.secondary};\n    }\n  `\n  )}\n`;\n\n\/\/render codesandbox here ()<\/code><\/pre>\n\n\n\n<p>Alongside <code>styled<\/code>, Precise UI exports helper functions for styling like <code>themed<\/code>, which allows to use default values of supplied theme, <code>getFontSize<\/code>, which sets font size, line height and font weight, based on passed parameters <\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Theme Customization<\/strong> <\/h3>\n\n\n\n<p>As shown above, components can be styled on individual level. However, PreciseUI can also receive a customized theme object, where global parameters for the whole component library can be updated. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Advanced component usage<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Form<\/strong><\/h3>\n\n\n\n<p>Handling forms can be cumbersome, especially in heavy form driven applications. This is where PreciseUI shines. When used with input components provided by PreciseUI, <code>Form<\/code> component will handle change and submit events. On top of that, it accepts validation rules, to check, if values of the fields are valid.<\/p>\n\n\n\n<p>Simple example of the form is given below.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import * as React from 'react';\nimport { render } from 'react-dom';\nimport { Container, Form, Button, TextField } from 'precise-ui';\n\nimport '.\/styles.css';\n\nfunction App() {\n  return (\n    &lt;Container>\n      &lt;h1>Form&lt;\/h1>\n\n      &lt;Form onSubmit={e => alert(JSON.stringify(e.data))}>\n        &lt;div>First:&lt;\/div>\n        &lt;div>\n          &lt;TextField name=\"first\" \/>\n        &lt;\/div>\n        &lt;div>Last:&lt;\/div>\n        &lt;div>\n          &lt;TextField name=\"last\" \/>\n        &lt;\/div>\n        &lt;div>\n          &lt;Button>Submit&lt;\/Button>\n        &lt;\/div>\n      &lt;\/Form>\n    &lt;\/Container>\n  );\n}<\/code><\/pre>\n\n\n\n<p>Here, <code>Form<\/code> component fires <code>onSubmit<\/code> event, with values from input components enclosed in it. For more complex cases, <code>Form<\/code> also accepts <code>onChange<\/code> handler, so every time any of the fields change, change event is received. <\/p>\n\n\n\n<iframe src=\"https:\/\/codesandbox.io\/s\/form-uqnn6\" style=\"width:100%; height:500px; border:0; border-radius: 4px; overflow:hidden;\" allow=\"geolocation; microphone; camera; midi; vr; accelerometer; gyroscope; payment; ambient-light-sensor; encrypted-media; usb\" sandbox=\"allow-modals allow-forms allow-popups allow-scripts allow-same-origin\"><\/iframe>\n\n\n\n<h3 class=\"wp-block-heading\">Responsive<\/h3>\n\n\n\n<p>Another useful component worth extra mentioning is <code>Responsive<\/code>. It allows to show and hide certain content based on the screen size. To use it, you just need to provide breakpoint name (<code>small<\/code>, <code>medium<\/code>, <code>large<\/code>, <code>smallAndMedium<\/code>, <code>mediumAndLarge<\/code> ), and component will handle displaying proper components. Below is a short example. <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import * as React from 'react';\nimport { render } from 'react-dom';\nimport { Container, Responsive } from 'precise-ui';\n\nimport '.\/styles.css';\n\nfunction App() {\n  return (\n    &lt;Container>\n      &lt;Responsive screenSize=\"small\">\n        &lt;p>This will render on small screens.&lt;\/p>\n      &lt;\/Responsive>\n      &lt;Responsive screenSize=\"smallAndMedium\">\n        &lt;p>This will render on small and medium screens.&lt;\/p>\n      &lt;\/Responsive>\n      &lt;Responsive screenSize=\"medium\">\n        &lt;p>This will render on medium screens.&lt;\/p>\n      &lt;\/Responsive>\n      &lt;Responsive screenSize=\"mediumAndLarge\">\n        &lt;p>This will render on medium and large screens.&lt;\/p>\n      &lt;\/Responsive>\n      &lt;Responsive screenSize=\"large\">\n        &lt;p>This will render on large screens.&lt;\/p>\n      &lt;\/Responsive>\n    &lt;\/Container>\n  );\n}<\/code><\/pre>\n\n\n\n<p><code>Responsive<\/code> component also accepts a callback, that receives a screen size label, mentioned above, for the user to dynamically decide, how it should behave. <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;Responsive\n  render={screenSize => (\n    &lt;p>\n      This is the screen size: &lt;b>{screenSize}&lt;\/b>\n    &lt;\/p>\n  )}\n\/><\/code><\/pre>\n\n\n\n<p> Apart from the main component, there is also utility function for styled-components that allows to apply certain styles for different screen sizes. <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const StyledDiv1 = styled.div`\n  ${displayTo('large')`font-weight: bold;`};\n`;\n\nconst StyledDiv2 = styled.div`\n  ${displayTo('mediumAndLarge')`font-weight: bold;`};\n`;\n\nconst StyledDiv3 = styled.div`\n  ${displayTo('medium')`font-weight: bold;`};\n`;\n\nconst StyledDiv4 = styled.div`\n  ${displayTo('smallAndMedium')`font-weight: bold;`};\n`;\n\nconst StyledDiv5 = styled.div`\n  ${displayTo('small')`font-weight: bold;`};\n`;\n\nconst StyledDiv6 = styled.div`\n  ${displayTo('(min-width: 200px) and (max-width: 500px)')`font-weight: bold;`};\n`;\n\nreturn (\n  &lt;div>\n    &lt;StyledDiv1>It's bold on large screens.&lt;\/StyledDiv1>\n    &lt;StyledDiv2>It's bold on medium and large screens.&lt;\/StyledDiv2>\n    &lt;StyledDiv3>It's bold on medium screens.&lt;\/StyledDiv3>\n    &lt;StyledDiv4>It's bold on small and medium screens.&lt;\/StyledDiv4>\n    &lt;StyledDiv5>It's bold on small screens.&lt;\/StyledDiv5>\n    &lt;StyledDiv6>It's bold on screens between 200px and 500px.&lt;\/StyledDiv6>\n  &lt;\/div>\n);<\/code><\/pre>\n\n\n\n<p>This is the general overview of PreciseUI component library. There are many more interesting and complex components, documentation for which can be found at <a href=\"https:\/\/precise-ui.io\/#\/Components\">https:\/\/precise-ui.io\/#\/Components<\/a> <\/p>\n\n\n<p>Apart from the main component, there is also utility function for styled-components that allows to apply certain styles for different screen sizes.<\/p>\n<pre><code class=\"language-js \">const StyledDiv1 = styled.div`\n  ${displayTo('large')`font-weight: bold;`};\n`;\n\nconst StyledDiv2 = styled.div`\n  ${displayTo('mediumAndLarge')`font-weight: bold;`};\n`;\n\nconst StyledDiv3 = styled.div`\n  ${displayTo('medium')`font-weight: bold;`};\n`;\n\nconst StyledDiv4 = styled.div`\n  ${displayTo('smallAndMedium')`font-weight: bold;`};\n`;\n\nconst StyledDiv5 = styled.div`\n  ${displayTo('small')`font-weight: bold;`};\n`;\n\nconst StyledDiv6 = styled.div`\n  ${displayTo('(min-width: 200px) and (max-width: 500px)')`font-weight: bold;`};\n`;\n\nreturn (\n  &lt;div&gt;\n    &lt;StyledDiv1&gt;It's bold on large screens.&lt;\/StyledDiv1&gt;\n    &lt;StyledDiv2&gt;It's bold on medium and large screens.&lt;\/StyledDiv2&gt;\n    &lt;StyledDiv3&gt;It's bold on medium screens.&lt;\/StyledDiv3&gt;\n    &lt;StyledDiv4&gt;It's bold on small and medium screens.&lt;\/StyledDiv4&gt;\n    &lt;StyledDiv5&gt;It's bold on small screens.&lt;\/StyledDiv5&gt;\n    &lt;StyledDiv6&gt;It's bold on screens between 200px and 500px.&lt;\/StyledDiv6&gt;\n  &lt;\/div&gt;\n);\n<\/code><\/pre>\n<p>This is the general overview of PreciseUI component library. There are many more interesting and complex components, documentation for which can be found at <a href=\"https:\/\/precise-ui.io\/#\/Components\">https:\/\/precise-ui.io\/#\/Components<\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>Few years ago we started working on Digital Customer Companion, which is an online portal for customers of Zeiss. It was a greenfield project, where we were laying foundation for one of the core digital products at Zeiss.<\/p>\n","protected":false},"author":7,"featured_media":172,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"advgb_blocks_editor_width":"","advgb_blocks_columns_visual_guide":"","footnotes":""},"categories":[7],"tags":[13,14,15],"topics":[17],"class_list":["post-170","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ui","tag-frontend","tag-react","tag-ui","topics-frontend"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Precise UI - Digital Innovation Partners<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blogs.zeiss.com\/tech\/precise-ui\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Precise UI - Digital Innovation Partners\" \/>\n<meta property=\"og:description\" content=\"Few years ago we started working on Digital Customer Companion, which is an online portal for customers of Zeiss. It was a greenfield project, where we were laying foundation for one of the core digital products at Zeiss.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blogs.zeiss.com\/tech\/precise-ui\/\" \/>\n<meta property=\"og:site_name\" content=\"Digital Innovation Partners\" \/>\n<meta property=\"article:published_time\" content=\"2020-02-29T14:27:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-02-24T10:40:46+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/01\/Precise_v2.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1920\" \/>\n\t<meta property=\"og:image:height\" content=\"1090\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Askar Absemetov\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Askar Absemetov\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blogs.zeiss.com\/tech\/precise-ui\/\",\"url\":\"https:\/\/blogs.zeiss.com\/tech\/precise-ui\/\",\"name\":\"Precise UI - Digital Innovation Partners\",\"isPartOf\":{\"@id\":\"https:\/\/blogs.zeiss.com\/tech\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/blogs.zeiss.com\/tech\/precise-ui\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/blogs.zeiss.com\/tech\/precise-ui\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/01\/Precise_v2.jpg\",\"datePublished\":\"2020-02-29T14:27:00+00:00\",\"dateModified\":\"2020-02-24T10:40:46+00:00\",\"author\":{\"@id\":\"https:\/\/blogs.zeiss.com\/tech\/#\/schema\/person\/1bbe013c886427cb56c99fb395230f32\"},\"breadcrumb\":{\"@id\":\"https:\/\/blogs.zeiss.com\/tech\/precise-ui\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blogs.zeiss.com\/tech\/precise-ui\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/blogs.zeiss.com\/tech\/precise-ui\/#primaryimage\",\"url\":\"https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/01\/Precise_v2.jpg\",\"contentUrl\":\"https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/01\/Precise_v2.jpg\",\"width\":1920,\"height\":1090,\"caption\":\"Precise\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blogs.zeiss.com\/tech\/precise-ui\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/blogs.zeiss.com\/tech\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Precise UI\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blogs.zeiss.com\/tech\/#website\",\"url\":\"https:\/\/blogs.zeiss.com\/tech\/\",\"name\":\"Digital Innovation Partners\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blogs.zeiss.com\/tech\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/blogs.zeiss.com\/tech\/#\/schema\/person\/1bbe013c886427cb56c99fb395230f32\",\"name\":\"Askar Absemetov\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/blogs.zeiss.com\/tech\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/02\/Picture_AskarAbsemetov-150x150.png\",\"contentUrl\":\"https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/02\/Picture_AskarAbsemetov-150x150.png\",\"caption\":\"Askar Absemetov\"},\"description\":\"Askar is a senior software engineer with ZEISS Digital Innovation Partners. His current focus is on frontend- and infrastructure-related topics.\",\"url\":\"https:\/\/blogs.zeiss.com\/tech\/author\/askar-absemetovzeiss-com\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Precise UI - Digital Innovation Partners","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blogs.zeiss.com\/tech\/precise-ui\/","og_locale":"en_US","og_type":"article","og_title":"Precise UI - Digital Innovation Partners","og_description":"Few years ago we started working on Digital Customer Companion, which is an online portal for customers of Zeiss. It was a greenfield project, where we were laying foundation for one of the core digital products at Zeiss.","og_url":"https:\/\/blogs.zeiss.com\/tech\/precise-ui\/","og_site_name":"Digital Innovation Partners","article_published_time":"2020-02-29T14:27:00+00:00","article_modified_time":"2020-02-24T10:40:46+00:00","og_image":[{"width":1920,"height":1090,"url":"https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/01\/Precise_v2.jpg","type":"image\/jpeg"}],"author":"Askar Absemetov","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Askar Absemetov","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/blogs.zeiss.com\/tech\/precise-ui\/","url":"https:\/\/blogs.zeiss.com\/tech\/precise-ui\/","name":"Precise UI - Digital Innovation Partners","isPartOf":{"@id":"https:\/\/blogs.zeiss.com\/tech\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blogs.zeiss.com\/tech\/precise-ui\/#primaryimage"},"image":{"@id":"https:\/\/blogs.zeiss.com\/tech\/precise-ui\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/01\/Precise_v2.jpg","datePublished":"2020-02-29T14:27:00+00:00","dateModified":"2020-02-24T10:40:46+00:00","author":{"@id":"https:\/\/blogs.zeiss.com\/tech\/#\/schema\/person\/1bbe013c886427cb56c99fb395230f32"},"breadcrumb":{"@id":"https:\/\/blogs.zeiss.com\/tech\/precise-ui\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blogs.zeiss.com\/tech\/precise-ui\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blogs.zeiss.com\/tech\/precise-ui\/#primaryimage","url":"https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/01\/Precise_v2.jpg","contentUrl":"https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/01\/Precise_v2.jpg","width":1920,"height":1090,"caption":"Precise"},{"@type":"BreadcrumbList","@id":"https:\/\/blogs.zeiss.com\/tech\/precise-ui\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blogs.zeiss.com\/tech\/"},{"@type":"ListItem","position":2,"name":"Precise UI"}]},{"@type":"WebSite","@id":"https:\/\/blogs.zeiss.com\/tech\/#website","url":"https:\/\/blogs.zeiss.com\/tech\/","name":"Digital Innovation Partners","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blogs.zeiss.com\/tech\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/blogs.zeiss.com\/tech\/#\/schema\/person\/1bbe013c886427cb56c99fb395230f32","name":"Askar Absemetov","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blogs.zeiss.com\/tech\/#\/schema\/person\/image\/","url":"https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/02\/Picture_AskarAbsemetov-150x150.png","contentUrl":"https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/02\/Picture_AskarAbsemetov-150x150.png","caption":"Askar Absemetov"},"description":"Askar is a senior software engineer with ZEISS Digital Innovation Partners. His current focus is on frontend- and infrastructure-related topics.","url":"https:\/\/blogs.zeiss.com\/tech\/author\/askar-absemetovzeiss-com\/"}]}},"author_meta":{"display_name":"Askar Absemetov","author_link":"https:\/\/blogs.zeiss.com\/tech\/author\/askar-absemetovzeiss-com\/"},"featured_img":"https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/01\/Precise_v2-300x170.jpg","coauthors":[],"tax_additional":{"categories":{"linked":["<a href=\"https:\/\/blogs.zeiss.com\/tech\/category\/ui\/\" class=\"advgb-post-tax-term\">UI<\/a>"],"unlinked":["<span class=\"advgb-post-tax-term\">UI<\/span>"]},"tags":{"linked":["<a href=\"https:\/\/blogs.zeiss.com\/tech\/category\/ui\/\" class=\"advgb-post-tax-term\">Frontend<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/tech\/category\/ui\/\" class=\"advgb-post-tax-term\">React<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/tech\/category\/ui\/\" class=\"advgb-post-tax-term\">UI<\/a>"],"unlinked":["<span class=\"advgb-post-tax-term\">Frontend<\/span>","<span class=\"advgb-post-tax-term\">React<\/span>","<span class=\"advgb-post-tax-term\">UI<\/span>"]}},"comment_count":"3","relative_dates":{"created":"Posted 6 years ago","modified":"Updated 6 years ago"},"absolute_dates":{"created":"Posted on February 29, 2020","modified":"Updated on February 24, 2020"},"absolute_dates_time":{"created":"Posted on February 29, 2020 2:27 pm","modified":"Updated on February 24, 2020 10:40 am"},"featured_img_caption":"","series_order":"","_links":{"self":[{"href":"https:\/\/blogs.zeiss.com\/tech\/wp-json\/wp\/v2\/posts\/170","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.zeiss.com\/tech\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.zeiss.com\/tech\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.zeiss.com\/tech\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.zeiss.com\/tech\/wp-json\/wp\/v2\/comments?post=170"}],"version-history":[{"count":14,"href":"https:\/\/blogs.zeiss.com\/tech\/wp-json\/wp\/v2\/posts\/170\/revisions"}],"predecessor-version":[{"id":240,"href":"https:\/\/blogs.zeiss.com\/tech\/wp-json\/wp\/v2\/posts\/170\/revisions\/240"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogs.zeiss.com\/tech\/wp-json\/wp\/v2\/media\/172"}],"wp:attachment":[{"href":"https:\/\/blogs.zeiss.com\/tech\/wp-json\/wp\/v2\/media?parent=170"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.zeiss.com\/tech\/wp-json\/wp\/v2\/categories?post=170"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.zeiss.com\/tech\/wp-json\/wp\/v2\/tags?post=170"},{"taxonomy":"topics","embeddable":true,"href":"https:\/\/blogs.zeiss.com\/tech\/wp-json\/wp\/v2\/topics?post=170"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}