{"id":9975,"date":"2022-05-05T14:30:31","date_gmt":"2022-05-05T12:30:31","guid":{"rendered":"https:\/\/vived.io\/frontend-thursday-vol-86-nowa-biblioteka-od-tworcow-chakra-ui-react-native-skia-figma-storybook-plugin\/"},"modified":"2022-09-19T13:16:28","modified_gmt":"2022-09-19T11:16:28","slug":"frontend-thursday-vol-86-nowa-biblioteka-od-tworcow-chakra-ui-react-native-skia-figma-storybook-plugin","status":"publish","type":"post","link":"https:\/\/vived.io\/pl\/frontend-thursday-vol-86-nowa-biblioteka-od-tworcow-chakra-ui-react-native-skia-figma-storybook-plugin\/","title":{"rendered":"Frontend Thursday vol. 86 &#8211; nowa biblioteka od tw\u00f3rc\u00f3w Chakra UI, React Native Skia, Figma Storybook Plugin"},"content":{"rendered":"\n<h2 id=\"1-zag-nowa-biblioteka-od-tworcow-chakra-ui\" data-num=1>1. Zag &#8211; nowa biblioteka od tw\u00f3rc\u00f3w Chakra UI<\/h2>\n\n\n\n<p>Gdybym za ka\u017cdym razem, kiedy w Frontend Weekly powo\u0142uj\u0119 si\u0119 na cytat \u201cTydzie\u0144 bez nowej JavaSriptowej biblioteki to tydzie\u0144 stracony\u201d, odk\u0142ada\u0142 do skarbonki 10 z\u0142otych, to za zebrane fundusze m\u00f3g\u0142bym kupi\u0107 sobie u\u017cywane Ferrari\u2026 No dobra, tak naprawd\u0119 to starczy\u0142oby co najwy\u017cej na dobry obiad, ale dzisiaj bud\u017cet powi\u0119kszy\u0142by si\u0119 o kolejn\u0105 dych\u0119 i by\u0142bym o krok bli\u017cej od wymarzonego samochodu. Ten tydzie\u0144 uratowali tw\u00f3rcy Chakra-UI (jednej z najpopularniejszych bibliotek komponent\u00f3w dla Reacta uznawanej przez wielu za t\u0105 najbardziej elastyczn\u0105) prezentuj\u0105c bibliotek\u0119 Zag.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"795\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/kqwiakwbzxo61.jpg\" alt=\"\" class=\"wp-image-4316\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/kqwiakwbzxo61.jpg 640w, https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/kqwiakwbzxo61-242x300.jpg 242w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/figure><\/div>\n\n\n\n<p>Je\u015bli nie siedzicie w ekosystemie Vue, to mo\u017ce Was zaskoczy\u0107 fakt, \u017ce od d\u0142u\u017cszego czasu trwaj\u0105 prace nad wersj\u0105 Chakra-UI kompatybiln\u0105 z tym\u017ce frameworkiem. Zesp\u00f3\u0142 odpowiedzialny za rozw\u00f3j tej odnogi biblioteki podj\u0105\u0142 decyzj\u0119 o przepisaniu wi\u0119kszo\u015bci kodu, tak aby dostarczy\u0107 u\u017cytkownikom maksymalnie wygodne API. Jak si\u0119 pewnie domy\u015blacie oznacza to, \u017ce ca\u0142a masa logiki musia\u0142a zosta\u0107 zduplikowana, co nieuchronnie prowadzi do powstawania bug\u00f3w. Remedium na zaistnia\u0142e problemy ma by\u0107 w\u0142a\u015bnie biblioteka Zag, kt\u00f3ra umo\u017cliwia wsp\u00f3\u0142dzielenie logiki komponent\u00f3w pomi\u0119dzy popularnymi frameworkami (na ten moment mi\u0119dzy React, Vue i SolidJS).<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"666\" height=\"500\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/6f0c5b.jpeg\" alt=\"\" class=\"wp-image-4317\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/6f0c5b.jpeg 666w, https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/6f0c5b-300x225.jpeg 300w\" sizes=\"auto, (max-width: 666px) 100vw, 666px\" \/><\/figure><\/div>\n\n\n\n<p>Sercem biblioteki Zag jest koncepcja maszyn stanowych &#8211; model reprezentacji logiki w kt\u00f3rym wyr\u00f3\u017cniamy sko\u0144czon\u0105 liczb\u0119 stan\u00f3w i definiujemy mo\u017cliwe przej\u015bcia mi\u0119dzy zdefiniowanymi stanami. Komponenty takie jak toggle, dialog czy menu w naturalny spos\u00f3b wpisuj\u0105 si\u0119 taki model reprezentacji danych. Na pierwszy rzut oka mo\u017ce wydawa\u0107 si\u0119, \u017ce wykorzystanie specjalnej biblioteki do tego celu jest jak strzelanie z armaty do muchy. Warto jednak zatrzyma\u0107 si\u0119 na chwil\u0119 i zastanowi\u0107 jak cz\u0119sto zdarza\u0142o Wam si\u0119, \u017ce proste komponenty rozrasta\u0142y si\u0119 z czasem do ogromnych rozmiar\u00f3w, a zrozumienie kompozycji useState, useCallback i useEffect wymaga\u0142o co najmniej doktoratu.\u00a0 Wykorzystanie maszyny stanowej zdecydowanie upraszcza kompozycj\u0119 hook\u00f3w i pozwala oddzieli\u0107 logik\u0119 od warstwy wizualnej. Nie twierdz\u0119, \u017ce to rozwi\u0105zanie dla ka\u017cdego, ale zespo\u0142y odpowiedzialne za rozw\u00f3j firmowej biblioteki komponent\u00f3w mog\u0105 by\u0107 zainteresowane (albo chocia\u017c zainspirowane).<\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-javascript\">import { createMachine } from &quot;@zag-js\/core&quot;\n\nconst machine = createMachine({\n  \/\/ initial state\n  initial: &quot;active&quot;,\n  \/\/ the finite states\n  states: {\n    active: {\n      on: {\n        CLICK: {\n          \/\/ go to inactive\n          target: &quot;inactive&quot;,\n        },\n      },\n    },\n    inactive: {\n      on: {\n        CLICK: {\n          \/\/ go to active\n          target: &quot;active&quot;,\n        },\n      },\n    },\n  },\n})\n\nfunction connect(state, send) {\n  const active = state.matches(&quot;active&quot;)\n  return {\n    active,\n    buttonProps: {\n      type: &quot;button&quot;,\n      role: &quot;switch&quot;,\n      &quot;aria-checked&quot;: active,\n      onClick() {\n        send(&quot;CLICK&quot;)\n      },\n    },\n  }\n}<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-javascript\">import { useMachine } from &quot;@zag-js\/react&quot;\nimport { machine, connect } from &quot;.\/toggle&quot;\n\nfunction Toggle() {\n  const [state, send] = useMachine(machine)\n  const api = connect(state, send)\n\n  return (\n    &lt;button\n      {...api.buttonProps}\n      style={{\n        width: &quot;40px&quot;,\n        height: &quot;24px&quot;,\n        borderRadius: &quot;999px&quot;,\n        background: api.active ? &quot;green&quot; : &quot;gray&quot;,\n      }}\n    &gt;\n      {api.active ? &quot;ON&quot; : &quot;OFF&quot;}\n    &lt;\/button&gt;\n  )\n}<\/code><\/pre>\n\n\n\n<p>Biblioteka Zag opr\u00f3cz API do tworzenia w\u0142asnych maszyn stanowych udost\u0119pnia r\u00f3wnie\u017c zestaw maszyn stanowych dla najpopularniejszych prostych komponent\u00f3w takich jak Menu, Slider czy Number Input. Warto zwr\u00f3ci\u0107 uwag\u0119 no fakt, \u017ce oferowane maszyny stanowe enkapsuluj\u0105 r\u00f3wnie\u017c Accessablility, czyli aspekt na kt\u00f3ry w wi\u0119kszo\u015bci projekt\u00f3w nie ma czasu.<\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-\">import * as numberInput from &quot;@zag-js\/number-input&quot;\nimport { useMachine, useSetup } from &quot;@zag-js\/react&quot;\n\nexport function NumberInput() {\n  const [state, send] = useMachine(numberInput.machine)\n  const ref = useSetup({ send, id: &quot;1&quot; })\n  const api = numberInput.connect(state, send)\n\n  return (\n    &lt;div ref={ref} {...api.rootProps}&gt;\n      &lt;label {...api.labelProps}&gt;Enter number:&lt;\/label&gt;\n      &lt;div&gt;\n        &lt;button {...api.decrementButtonProps}&gt;DEC&lt;\/button&gt;\n        &lt;input {...api.inputProps} \/&gt;\n        &lt;button {...api.incrementButtonProps}&gt;INC&lt;\/button&gt;\n      &lt;\/div&gt;\n    &lt;\/div&gt;\n  )\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a:<\/h3>\n\n\n\n<p><a href=\"https:\/\/zagjs.com\/\">https:\/\/zagjs.com\/<br><\/a><a href=\"https:\/\/zagjs.com\/components\/react\/number-input\">https:\/\/zagjs.com\/components\/react\/number-input<\/a><br><a href=\"https:\/\/zagjs.com\/overview\/whats-a-machine\">https:\/\/zagjs.com\/overview\/whats-a-machine<\/a><\/p>\n\n\n\n<h2 id=\"2-react-native-skia\" data-num=2>2. React Native Skia<\/h2>\n\n\n\n<p>Skia to otwarto\u017ar\u00f3d\u0142owy biblioteka do grafiki 2D rozwijana przez Shopify, kt\u00f3ra dostarcza API dzia\u0142aj\u0105ce na szerokiej gamie sprz\u0119tu. Skia mo\u017ce pochwali\u0107 si\u0119 imponuj\u0105cym portfolio wykorzystuj\u0105cych j\u0105 rozwi\u0105za\u0144. W galerii s\u0142aw znajdziemy takie tuzy jak Google Chrome, Chrome OS czy silnik renderowania Fluttera. Nied\u0142ugo lista ta mo\u017ce si\u0119 powi\u0119kszy\u0107, bo Shopify og\u0142osi\u0142o w minionym tygodniu bibliotek\u0119 integruj\u0105c\u0105 React Native i Skia.<\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-javascript\">import {Skia, SkiaView, useDrawCallback} from &quot;@shopify\/react-native-skia&quot;;\n \nexport const HelloWorld = () =&gt; {\n  const r = 128;\n  const onDraw = useDrawCallback((canvas) =&gt; {\n    const paint = Skia.Paint();\n    paint.setAntiAlias(true);\n    cyan.setColor(Skia.Color(&quot;cyan&quot;));\n    canvas.drawCircle(r, r, r, paint);\n  });\n  return (\n    &lt;SkiaView style={{ flex: 1 }} onDraw={onDraw} \/&gt;\n  );\n};<\/code><\/pre>\n\n\n\n<p>Skia dostarcza deweloperom troch\u0119 ekscytuj\u0105cych mo\u017cliwo\u015bci, ale jak dla mnie najbardziej interesuj\u0105ce s\u0105 plany Shopify dla React Native Skia. Jak si\u0119 okazuje nowo powsta\u0142e API jest w 100% kompatybilne z API Fluttera. W przysz\u0142o\u015bci ma to umo\u017cliwi\u0107 wykorzystanie silnika renderowania Fluttera dla weba do renderowania aplikacji React Native.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"697\" height=\"500\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/6f0ch7.jpeg\" alt=\"\" class=\"wp-image-4318\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/6f0ch7.jpeg 697w, https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/6f0ch7-300x215.jpeg 300w\" sizes=\"auto, (max-width: 697px) 100vw, 697px\" \/><\/figure><\/div>\n\n\n\n<p>Wykorzystanie wsp\u00f3lnego silnika renderowania przez React Native i Flutter brzmi troch\u0119\u2026 dziwnie. Je\u015bli Shopify uda si\u0119 przepchn\u0105\u0107 sw\u00f3j pomys\u0142 to mo\u017ce to doprowadzi\u0107 do dynamicznego rozwoju odnogi Skia opartej o WebAssembly. To jeszcze nie koniec standardowego HTML-a, ale by\u0107 mo\u017ce jeden z krok\u00f3w milowych w tym kierunku.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"500\" height=\"672\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/6f0ct1.jpeg\" alt=\"\" class=\"wp-image-4319\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/6f0ct1.jpeg 500w, https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/6f0ct1-223x300.jpeg 223w\" sizes=\"auto, (max-width: 500px) 100vw, 500px\" \/><figcaption>Tak d\u0142ugo jak problemy z powy\u017cszego mema nie zostan\u0105 zaadresowane, ja nie wierz\u0119 w przysz\u0142o\u015b\u0107 opart\u0105 o Canvas + WebAssembly.<\/figcaption><\/figure><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a:<\/h3>\n\n\n\n<p><a href=\"https:\/\/shopify.engineering\/react-native-skia-shopify\">https:\/\/shopify.engineering\/react-native-skia-shopify<\/a><\/p>\n\n\n\n<h2 id=\"3-integracja-figmy-ze-storybook\" data-num=3>3. Integracja Figmy ze Storybook<\/h2>\n\n\n\n<p>Osoba odpowiedzialna za PR Storybooka zdecydowanie zas\u0142uguje na podwy\u017ck\u0119. Informacje o nowo\u015bciach w ich flagowym produkcie rozchodz\u0105 si\u0119 po internecie viralowo. Nie tak dawno informowali\u015bmy Was o Lazy Loadingu, kt\u00f3ry trafi\u0142 do Storybook 6.5, a kilka dni temu firma zaprezentowa\u0142a kolejn\u0105 nowo\u015b\u0107. Tym razem pad\u0142o na plugin, kt\u00f3ry umo\u017cliwia po\u0142\u0105czenie designu komponent\u00f3w w Figmie z ich odpowiednikami w Storybook. Warto zaznaczy\u0107, \u017ce wtyczka powsta\u0142a we wsp\u00f3\u0142pracy z Figm\u0105 wi\u0119c oczekiwa\u0107 mo\u017cemy najwy\u017cszej jako\u015bci.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"500\" height=\"816\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/6f0d6i.jpeg\" alt=\"\" class=\"wp-image-4320\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/6f0d6i.jpeg 500w, https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/6f0d6i-184x300.jpeg 184w\" sizes=\"auto, (max-width: 500px) 100vw, 500px\" \/><figcaption>Podgl\u0105d zaimplementowanego komponentu uruchamiany jest w interaktywnym trybie wewn\u0105trz Figmy, co pozwala w prosty spos\u00f3b por\u00f3wnywa\u0107 design z implementacj\u0105. Gdyby jeszcze w automatyczny spos\u00f3b\u00a0 zapewnia\u0142o to 100% zgodno\u015b\u0107 design\u00f3w z implementacj\u0105\u2026<\/figcaption><\/figure><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a:<\/h3>\n\n\n\n<p><a href=\"https:\/\/storybook.js.org\/blog\/figma-plugin-for-storybook\/\">https:\/\/storybook.js.org\/blog\/figma-plugin-for-storybook\/<\/a><\/p>\n\n\n\n<h2 id=\"bonus-historia-react-concurrent-features\" data-num=4>Bonus: Historia React Concurrent Features<\/h2>\n\n\n\n<p>Na zako\u0144czenie dzisiejszego przegl\u0105du chcia\u0142bym podzieli\u0107 si\u0119 z Wami pere\u0142k\u0105, jak\u0105 uda\u0142o mi si\u0119 wy\u0142owi\u0107 w tym tygodniu na YouTube. W zamieszczonym poni\u017cej filmie w telegraficznym skr\u00f3cie poznacie histori\u0119 React Concurrent Features (a historii tej jest troch\u0119, bo prace trwa\u0142y 2161 dni, czyli prawie 6 lat). I nie dajcie si\u0119 zmyli\u0107 pozorom, znajomo\u015b\u0107 korzeni wsp\u00f3\u0142bie\u017cno\u015bci w React to nie tylko wiedza, kt\u00f3r\u0105 pochwalicie si\u0119 na najbli\u017cszej kawie, ale te\u017c szansa na poznanie g\u0142\u0119bszego kontekstu nowych funkcjonalno\u015bci. Nie pami\u0119tam kiedy tak dobrze wykorzysta\u0142em 10 minut &#8211; naprawd\u0119 polecam!<\/p>\n\n\n\n<figure class=\"wp-block-embed aligncenter is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<div class=\"embed-responsive embed-responsive-16by9\"><iframe loading=\"lazy\" title=\"The Story of Concurrent React\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/NZoRlVi3MjQ?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/div>\n<\/div><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Maj\u00f3wka za nami, wi\u0119c mam nadziej\u0119, \u017ce wszyscy jeste\u015bcie wypocz\u0119ci i gotowi na kolejn\u0105 dawk\u0119 frontendowych nowo\u015bci! W tym tygodniu mamy dla Was now\u0105 bibliotek\u0119 od tw\u00f3rc\u00f3w Chakra UI, React Native Skia i oficjalny release integracji Storybook z Figm\u0105. \u0141apcie co\u015b do picia, rozsi\u0105d\u017acie si\u0119 w fotelu i zapraszamy do lektury!<\/p>\n","protected":false},"author":12,"featured_media":8081,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[273],"tags":[],"class_list":["post-9975","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-frontend-pl"],"acf":{"weekly_summary":true,"push_notification_image":"https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/FRONTEND-1.png","feature_image_visible":false,"estimated_reading_time":"5","feature_image_blog":{"ID":8079,"id":8079,"title":"pexels-photo-8254082","filename":"pexels-photo-8254082.jpeg","filesize":144509,"url":"https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/pexels-photo-8254082.jpeg","link":"https:\/\/vived.io\/pl\/frontend-thursday-vol-86-nowa-biblioteka-od-tworcow-chakra-ui-react-native-skia-figma-storybook-plugin\/pexels-photo-8254082-2\/","alt":"","author":"12","description":"","caption":"","name":"pexels-photo-8254082-2","status":"inherit","uploaded_to":9975,"date":"2022-05-05 12:21:24","modified":"2022-05-05 12:21:24","menu_order":0,"mime_type":"image\/jpeg","type":"image","subtype":"jpeg","icon":"https:\/\/vived.io\/wp-includes\/images\/media\/default.png","width":1000,"height":750,"sizes":{"thumbnail":"https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/pexels-photo-8254082-150x150.jpeg","thumbnail-width":150,"thumbnail-height":150,"medium":"https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/pexels-photo-8254082-300x225.jpeg","medium-width":300,"medium-height":225,"medium_large":"https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/pexels-photo-8254082-768x576.jpeg","medium_large-width":768,"medium_large-height":576,"large":"https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/pexels-photo-8254082.jpeg","large-width":1000,"large-height":750,"1536x1536":"https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/pexels-photo-8254082.jpeg","1536x1536-width":1000,"1536x1536-height":750,"2048x2048":"https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/pexels-photo-8254082.jpeg","2048x2048-width":1000,"2048x2048-height":750,"gform-image-choice-sm":"https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/pexels-photo-8254082.jpeg","gform-image-choice-sm-width":300,"gform-image-choice-sm-height":225,"gform-image-choice-md":"https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/pexels-photo-8254082.jpeg","gform-image-choice-md-width":400,"gform-image-choice-md-height":300,"gform-image-choice-lg":"https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/pexels-photo-8254082.jpeg","gform-image-choice-lg-width":600,"gform-image-choice-lg-height":450}}},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Frontend Thursday vol. 86 - nowa biblioteka od tw\u00f3rc\u00f3w Chakra UI, React Native Skia, Figma Storybook Plugin - Vived<\/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:\/\/vived.io\/pl\/frontend-thursday-vol-86-nowa-biblioteka-od-tworcow-chakra-ui-react-native-skia-figma-storybook-plugin\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Frontend Thursday vol. 86 - nowa biblioteka od tw\u00f3rc\u00f3w Chakra UI, React Native Skia, Figma Storybook Plugin - Vived\" \/>\n<meta property=\"og:description\" content=\"Maj\u00f3wka za nami, wi\u0119c mam nadziej\u0119, \u017ce wszyscy jeste\u015bcie wypocz\u0119ci i gotowi na kolejn\u0105 dawk\u0119 frontendowych nowo\u015bci! W tym tygodniu mamy dla Was now\u0105 bibliotek\u0119 od tw\u00f3rc\u00f3w Chakra UI, React Native Skia i oficjalny release integracji Storybook z Figm\u0105. \u0141apcie co\u015b do picia, rozsi\u0105d\u017acie si\u0119 w fotelu i zapraszamy do lektury!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vived.io\/pl\/frontend-thursday-vol-86-nowa-biblioteka-od-tworcow-chakra-ui-react-native-skia-figma-storybook-plugin\/\" \/>\n<meta property=\"og:site_name\" content=\"Vived\" \/>\n<meta property=\"article:published_time\" content=\"2022-05-05T12:30:31+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-09-19T11:16:28+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/FRONTEND-1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"628\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Tomasz Borowicz\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/FRONTEND-1.png\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-86-nowa-biblioteka-od-tworcow-chakra-ui-react-native-skia-figma-storybook-plugin\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-86-nowa-biblioteka-od-tworcow-chakra-ui-react-native-skia-figma-storybook-plugin\/\"},\"author\":{\"name\":\"Tomasz Borowicz\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/9d2a72fe7d0dfbb4092675afbab742bb\"},\"headline\":\"Frontend Thursday vol. 86 &#8211; nowa biblioteka od tw\u00f3rc\u00f3w Chakra UI, React Native Skia, Figma Storybook Plugin\",\"datePublished\":\"2022-05-05T12:30:31+00:00\",\"dateModified\":\"2022-09-19T11:16:28+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-86-nowa-biblioteka-od-tworcow-chakra-ui-react-native-skia-figma-storybook-plugin\/\"},\"wordCount\":934,\"publisher\":{\"@id\":\"https:\/\/vived.io\/pl\/#organization\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-86-nowa-biblioteka-od-tworcow-chakra-ui-react-native-skia-figma-storybook-plugin\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/FRONTEND-1.png\",\"articleSection\":[\"Frontend\"],\"inLanguage\":\"pl-PL\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-86-nowa-biblioteka-od-tworcow-chakra-ui-react-native-skia-figma-storybook-plugin\/\",\"url\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-86-nowa-biblioteka-od-tworcow-chakra-ui-react-native-skia-figma-storybook-plugin\/\",\"name\":\"Frontend Thursday vol. 86 - nowa biblioteka od tw\u00f3rc\u00f3w Chakra UI, React Native Skia, Figma Storybook Plugin - Vived\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-86-nowa-biblioteka-od-tworcow-chakra-ui-react-native-skia-figma-storybook-plugin\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-86-nowa-biblioteka-od-tworcow-chakra-ui-react-native-skia-figma-storybook-plugin\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/FRONTEND-1.png\",\"datePublished\":\"2022-05-05T12:30:31+00:00\",\"dateModified\":\"2022-09-19T11:16:28+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-86-nowa-biblioteka-od-tworcow-chakra-ui-react-native-skia-figma-storybook-plugin\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/vived.io\/pl\/frontend-thursday-vol-86-nowa-biblioteka-od-tworcow-chakra-ui-react-native-skia-figma-storybook-plugin\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-86-nowa-biblioteka-od-tworcow-chakra-ui-react-native-skia-figma-storybook-plugin\/#primaryimage\",\"url\":\"https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/FRONTEND-1.png\",\"contentUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/FRONTEND-1.png\",\"width\":1200,\"height\":628},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-86-nowa-biblioteka-od-tworcow-chakra-ui-react-native-skia-figma-storybook-plugin\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/vived.io\/pl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Frontend Thursday vol. 86 &#8211; nowa biblioteka od tw\u00f3rc\u00f3w Chakra UI, React Native Skia, Figma Storybook Plugin\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/vived.io\/pl\/#website\",\"url\":\"https:\/\/vived.io\/pl\/\",\"name\":\"Vived\",\"description\":\"platform empowering IT people and technology companies to synergic growth\",\"publisher\":{\"@id\":\"https:\/\/vived.io\/pl\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/vived.io\/pl\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pl-PL\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/vived.io\/pl\/#organization\",\"name\":\"Vived\",\"url\":\"https:\/\/vived.io\/pl\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png\",\"contentUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png\",\"width\":136,\"height\":45,\"caption\":\"Vived\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/9d2a72fe7d0dfbb4092675afbab742bb\",\"name\":\"Tomasz Borowicz\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/804536d2672538508d43f60ad2108e5aaea76c192653eaf95d4c3934b7d1dbb6?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/804536d2672538508d43f60ad2108e5aaea76c192653eaf95d4c3934b7d1dbb6?s=96&d=mm&r=g\",\"caption\":\"Tomasz Borowicz\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Frontend Thursday vol. 86 - nowa biblioteka od tw\u00f3rc\u00f3w Chakra UI, React Native Skia, Figma Storybook Plugin - Vived","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:\/\/vived.io\/pl\/frontend-thursday-vol-86-nowa-biblioteka-od-tworcow-chakra-ui-react-native-skia-figma-storybook-plugin\/","og_locale":"pl_PL","og_type":"article","og_title":"Frontend Thursday vol. 86 - nowa biblioteka od tw\u00f3rc\u00f3w Chakra UI, React Native Skia, Figma Storybook Plugin - Vived","og_description":"Maj\u00f3wka za nami, wi\u0119c mam nadziej\u0119, \u017ce wszyscy jeste\u015bcie wypocz\u0119ci i gotowi na kolejn\u0105 dawk\u0119 frontendowych nowo\u015bci! W tym tygodniu mamy dla Was now\u0105 bibliotek\u0119 od tw\u00f3rc\u00f3w Chakra UI, React Native Skia i oficjalny release integracji Storybook z Figm\u0105. \u0141apcie co\u015b do picia, rozsi\u0105d\u017acie si\u0119 w fotelu i zapraszamy do lektury!","og_url":"https:\/\/vived.io\/pl\/frontend-thursday-vol-86-nowa-biblioteka-od-tworcow-chakra-ui-react-native-skia-figma-storybook-plugin\/","og_site_name":"Vived","article_published_time":"2022-05-05T12:30:31+00:00","article_modified_time":"2022-09-19T11:16:28+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/FRONTEND-1.png","type":"image\/png"}],"author":"Tomasz Borowicz","twitter_card":"summary_large_image","twitter_image":"https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/FRONTEND-1.png","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-86-nowa-biblioteka-od-tworcow-chakra-ui-react-native-skia-figma-storybook-plugin\/#article","isPartOf":{"@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-86-nowa-biblioteka-od-tworcow-chakra-ui-react-native-skia-figma-storybook-plugin\/"},"author":{"name":"Tomasz Borowicz","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/9d2a72fe7d0dfbb4092675afbab742bb"},"headline":"Frontend Thursday vol. 86 &#8211; nowa biblioteka od tw\u00f3rc\u00f3w Chakra UI, React Native Skia, Figma Storybook Plugin","datePublished":"2022-05-05T12:30:31+00:00","dateModified":"2022-09-19T11:16:28+00:00","mainEntityOfPage":{"@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-86-nowa-biblioteka-od-tworcow-chakra-ui-react-native-skia-figma-storybook-plugin\/"},"wordCount":934,"publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"image":{"@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-86-nowa-biblioteka-od-tworcow-chakra-ui-react-native-skia-figma-storybook-plugin\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/FRONTEND-1.png","articleSection":["Frontend"],"inLanguage":"pl-PL"},{"@type":"WebPage","@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-86-nowa-biblioteka-od-tworcow-chakra-ui-react-native-skia-figma-storybook-plugin\/","url":"https:\/\/vived.io\/pl\/frontend-thursday-vol-86-nowa-biblioteka-od-tworcow-chakra-ui-react-native-skia-figma-storybook-plugin\/","name":"Frontend Thursday vol. 86 - nowa biblioteka od tw\u00f3rc\u00f3w Chakra UI, React Native Skia, Figma Storybook Plugin - Vived","isPartOf":{"@id":"https:\/\/vived.io\/pl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-86-nowa-biblioteka-od-tworcow-chakra-ui-react-native-skia-figma-storybook-plugin\/#primaryimage"},"image":{"@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-86-nowa-biblioteka-od-tworcow-chakra-ui-react-native-skia-figma-storybook-plugin\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/FRONTEND-1.png","datePublished":"2022-05-05T12:30:31+00:00","dateModified":"2022-09-19T11:16:28+00:00","breadcrumb":{"@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-86-nowa-biblioteka-od-tworcow-chakra-ui-react-native-skia-figma-storybook-plugin\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vived.io\/pl\/frontend-thursday-vol-86-nowa-biblioteka-od-tworcow-chakra-ui-react-native-skia-figma-storybook-plugin\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-86-nowa-biblioteka-od-tworcow-chakra-ui-react-native-skia-figma-storybook-plugin\/#primaryimage","url":"https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/FRONTEND-1.png","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/FRONTEND-1.png","width":1200,"height":628},{"@type":"BreadcrumbList","@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-86-nowa-biblioteka-od-tworcow-chakra-ui-react-native-skia-figma-storybook-plugin\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/vived.io\/pl\/"},{"@type":"ListItem","position":2,"name":"Frontend Thursday vol. 86 &#8211; nowa biblioteka od tw\u00f3rc\u00f3w Chakra UI, React Native Skia, Figma Storybook Plugin"}]},{"@type":"WebSite","@id":"https:\/\/vived.io\/pl\/#website","url":"https:\/\/vived.io\/pl\/","name":"Vived","description":"platform empowering IT people and technology companies to synergic growth","publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/vived.io\/pl\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pl-PL"},{"@type":"Organization","@id":"https:\/\/vived.io\/pl\/#organization","name":"Vived","url":"https:\/\/vived.io\/pl\/","logo":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/","url":"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png","width":136,"height":45,"caption":"Vived"},"image":{"@id":"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/9d2a72fe7d0dfbb4092675afbab742bb","name":"Tomasz Borowicz","image":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/804536d2672538508d43f60ad2108e5aaea76c192653eaf95d4c3934b7d1dbb6?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/804536d2672538508d43f60ad2108e5aaea76c192653eaf95d4c3934b7d1dbb6?s=96&d=mm&r=g","caption":"Tomasz Borowicz"}}]}},"blocks_vived":[{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>1. Zag - nowa biblioteka od tw\u00f3rc\u00f3w Chakra UI<\/h2>\n","innerContent":["\n<h2>1. Zag - nowa biblioteka od tw\u00f3rc\u00f3w Chakra UI<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Gdybym za ka\u017cdym razem, kiedy w Frontend Weekly powo\u0142uj\u0119 si\u0119 na cytat \u201cTydzie\u0144 bez nowej JavaSriptowej biblioteki to tydzie\u0144 stracony\u201d, odk\u0142ada\u0142 do skarbonki 10 z\u0142otych, to za zebrane fundusze m\u00f3g\u0142bym kupi\u0107 sobie u\u017cywane Ferrari\u2026 No dobra, tak naprawd\u0119 to starczy\u0142oby co najwy\u017cej na dobry obiad, ale dzisiaj bud\u017cet powi\u0119kszy\u0142by si\u0119 o kolejn\u0105 dych\u0119 i by\u0142bym o krok bli\u017cej od wymarzonego samochodu. Ten tydzie\u0144 uratowali tw\u00f3rcy Chakra-UI (jednej z najpopularniejszych bibliotek komponent\u00f3w dla Reacta uznawanej przez wielu za t\u0105 najbardziej elastyczn\u0105) prezentuj\u0105c bibliotek\u0119 Zag.<\/p>\n","innerContent":["\n<p>Gdybym za ka\u017cdym razem, kiedy w Frontend Weekly powo\u0142uj\u0119 si\u0119 na cytat \u201cTydzie\u0144 bez nowej JavaSriptowej biblioteki to tydzie\u0144 stracony\u201d, odk\u0142ada\u0142 do skarbonki 10 z\u0142otych, to za zebrane fundusze m\u00f3g\u0142bym kupi\u0107 sobie u\u017cywane Ferrari\u2026 No dobra, tak naprawd\u0119 to starczy\u0142oby co najwy\u017cej na dobry obiad, ale dzisiaj bud\u017cet powi\u0119kszy\u0142by si\u0119 o kolejn\u0105 dych\u0119 i by\u0142bym o krok bli\u017cej od wymarzonego samochodu. Ten tydzie\u0144 uratowali tw\u00f3rcy Chakra-UI (jednej z najpopularniejszych bibliotek komponent\u00f3w dla Reacta uznawanej przez wielu za t\u0105 najbardziej elastyczn\u0105) prezentuj\u0105c bibliotek\u0119 Zag.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":4316,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/kqwiakwbzxo61.jpg\" alt=\"\" class=\"wp-image-4316\"\/><\/figure><\/div>\n","innerContent":["\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/kqwiakwbzxo61.jpg\" alt=\"\" class=\"wp-image-4316\"\/><\/figure><\/div>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Je\u015bli nie siedzicie w ekosystemie Vue, to mo\u017ce Was zaskoczy\u0107 fakt, \u017ce od d\u0142u\u017cszego czasu trwaj\u0105 prace nad wersj\u0105 Chakra-UI kompatybiln\u0105 z tym\u017ce frameworkiem. Zesp\u00f3\u0142 odpowiedzialny za rozw\u00f3j tej odnogi biblioteki podj\u0105\u0142 decyzj\u0119 o przepisaniu wi\u0119kszo\u015bci kodu, tak aby dostarczy\u0107 u\u017cytkownikom maksymalnie wygodne API. Jak si\u0119 pewnie domy\u015blacie oznacza to, \u017ce ca\u0142a masa logiki musia\u0142a zosta\u0107 zduplikowana, co nieuchronnie prowadzi do powstawania bug\u00f3w. Remedium na zaistnia\u0142e problemy ma by\u0107 w\u0142a\u015bnie biblioteka Zag, kt\u00f3ra umo\u017cliwia wsp\u00f3\u0142dzielenie logiki komponent\u00f3w pomi\u0119dzy popularnymi frameworkami (na ten moment mi\u0119dzy React, Vue i SolidJS).<\/p>\n","innerContent":["\n<p>Je\u015bli nie siedzicie w ekosystemie Vue, to mo\u017ce Was zaskoczy\u0107 fakt, \u017ce od d\u0142u\u017cszego czasu trwaj\u0105 prace nad wersj\u0105 Chakra-UI kompatybiln\u0105 z tym\u017ce frameworkiem. Zesp\u00f3\u0142 odpowiedzialny za rozw\u00f3j tej odnogi biblioteki podj\u0105\u0142 decyzj\u0119 o przepisaniu wi\u0119kszo\u015bci kodu, tak aby dostarczy\u0107 u\u017cytkownikom maksymalnie wygodne API. Jak si\u0119 pewnie domy\u015blacie oznacza to, \u017ce ca\u0142a masa logiki musia\u0142a zosta\u0107 zduplikowana, co nieuchronnie prowadzi do powstawania bug\u00f3w. Remedium na zaistnia\u0142e problemy ma by\u0107 w\u0142a\u015bnie biblioteka Zag, kt\u00f3ra umo\u017cliwia wsp\u00f3\u0142dzielenie logiki komponent\u00f3w pomi\u0119dzy popularnymi frameworkami (na ten moment mi\u0119dzy React, Vue i SolidJS).<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":4317,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/6f0c5b.jpeg\" alt=\"\" class=\"wp-image-4317\"\/><\/figure><\/div>\n","innerContent":["\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/6f0c5b.jpeg\" alt=\"\" class=\"wp-image-4317\"\/><\/figure><\/div>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Sercem biblioteki Zag jest koncepcja maszyn stanowych - model reprezentacji logiki w kt\u00f3rym wyr\u00f3\u017cniamy sko\u0144czon\u0105 liczb\u0119 stan\u00f3w i definiujemy mo\u017cliwe przej\u015bcia mi\u0119dzy zdefiniowanymi stanami. Komponenty takie jak toggle, dialog czy menu w naturalny spos\u00f3b wpisuj\u0105 si\u0119 taki model reprezentacji danych. Na pierwszy rzut oka mo\u017ce wydawa\u0107 si\u0119, \u017ce wykorzystanie specjalnej biblioteki do tego celu jest jak strzelanie z armaty do muchy. Warto jednak zatrzyma\u0107 si\u0119 na chwil\u0119 i zastanowi\u0107 jak cz\u0119sto zdarza\u0142o Wam si\u0119, \u017ce proste komponenty rozrasta\u0142y si\u0119 z czasem do ogromnych rozmiar\u00f3w, a zrozumienie kompozycji useState, useCallback i useEffect wymaga\u0142o co najmniej doktoratu.\u00a0 Wykorzystanie maszyny stanowej zdecydowanie upraszcza kompozycj\u0119 hook\u00f3w i pozwala oddzieli\u0107 logik\u0119 od warstwy wizualnej. Nie twierdz\u0119, \u017ce to rozwi\u0105zanie dla ka\u017cdego, ale zespo\u0142y odpowiedzialne za rozw\u00f3j firmowej biblioteki komponent\u00f3w mog\u0105 by\u0107 zainteresowane (albo chocia\u017c zainspirowane).<\/p>\n","innerContent":["\n<p>Sercem biblioteki Zag jest koncepcja maszyn stanowych - model reprezentacji logiki w kt\u00f3rym wyr\u00f3\u017cniamy sko\u0144czon\u0105 liczb\u0119 stan\u00f3w i definiujemy mo\u017cliwe przej\u015bcia mi\u0119dzy zdefiniowanymi stanami. Komponenty takie jak toggle, dialog czy menu w naturalny spos\u00f3b wpisuj\u0105 si\u0119 taki model reprezentacji danych. Na pierwszy rzut oka mo\u017ce wydawa\u0107 si\u0119, \u017ce wykorzystanie specjalnej biblioteki do tego celu jest jak strzelanie z armaty do muchy. Warto jednak zatrzyma\u0107 si\u0119 na chwil\u0119 i zastanowi\u0107 jak cz\u0119sto zdarza\u0142o Wam si\u0119, \u017ce proste komponenty rozrasta\u0142y si\u0119 z czasem do ogromnych rozmiar\u00f3w, a zrozumienie kompozycji useState, useCallback i useEffect wymaga\u0142o co najmniej doktoratu.\u00a0 Wykorzystanie maszyny stanowej zdecydowanie upraszcza kompozycj\u0119 hook\u00f3w i pozwala oddzieli\u0107 logik\u0119 od warstwy wizualnej. Nie twierdz\u0119, \u017ce to rozwi\u0105zanie dla ka\u017cdego, ale zespo\u0142y odpowiedzialne za rozw\u00f3j firmowej biblioteki komponent\u00f3w mog\u0105 by\u0107 zainteresowane (albo chocia\u017c zainspirowane).<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"prismatic\/blocks","attrs":{"language":"javascript"},"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-javascript\">import { createMachine } from \"@zag-js\/core\"\n\nconst machine = createMachine({\n  \/\/ initial state\n  initial: \"active\",\n  \/\/ the finite states\n  states: {\n    active: {\n      on: {\n        CLICK: {\n          \/\/ go to inactive\n          target: \"inactive\",\n        },\n      },\n    },\n    inactive: {\n      on: {\n        CLICK: {\n          \/\/ go to active\n          target: \"active\",\n        },\n      },\n    },\n  },\n})\n\nfunction connect(state, send) {\n  const active = state.matches(\"active\")\n  return {\n    active,\n    buttonProps: {\n      type: \"button\",\n      role: \"switch\",\n      \"aria-checked\": active,\n      onClick() {\n        send(\"CLICK\")\n      },\n    },\n  }\n}<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-javascript\">import { createMachine } from \"@zag-js\/core\"\n\nconst machine = createMachine({\n  \/\/ initial state\n  initial: \"active\",\n  \/\/ the finite states\n  states: {\n    active: {\n      on: {\n        CLICK: {\n          \/\/ go to inactive\n          target: \"inactive\",\n        },\n      },\n    },\n    inactive: {\n      on: {\n        CLICK: {\n          \/\/ go to active\n          target: \"active\",\n        },\n      },\n    },\n  },\n})\n\nfunction connect(state, send) {\n  const active = state.matches(\"active\")\n  return {\n    active,\n    buttonProps: {\n      type: \"button\",\n      role: \"switch\",\n      \"aria-checked\": active,\n      onClick() {\n        send(\"CLICK\")\n      },\n    },\n  }\n}<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"prismatic\/blocks","attrs":{"language":"javascript"},"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-javascript\">import { useMachine } from \"@zag-js\/react\"\nimport { machine, connect } from \".\/toggle\"\n\nfunction Toggle() {\n  const [state, send] = useMachine(machine)\n  const api = connect(state, send)\n\n  return (\n    &lt;button\n      {...api.buttonProps}\n      style={{\n        width: \"40px\",\n        height: \"24px\",\n        borderRadius: \"999px\",\n        background: api.active ? \"green\" : \"gray\",\n      }}\n    >\n      {api.active ? \"ON\" : \"OFF\"}\n    &lt;\/button>\n  )\n}<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-javascript\">import { useMachine } from \"@zag-js\/react\"\nimport { machine, connect } from \".\/toggle\"\n\nfunction Toggle() {\n  const [state, send] = useMachine(machine)\n  const api = connect(state, send)\n\n  return (\n    &lt;button\n      {...api.buttonProps}\n      style={{\n        width: \"40px\",\n        height: \"24px\",\n        borderRadius: \"999px\",\n        background: api.active ? \"green\" : \"gray\",\n      }}\n    >\n      {api.active ? \"ON\" : \"OFF\"}\n    &lt;\/button>\n  )\n}<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Biblioteka Zag opr\u00f3cz API do tworzenia w\u0142asnych maszyn stanowych udost\u0119pnia r\u00f3wnie\u017c zestaw maszyn stanowych dla najpopularniejszych prostych komponent\u00f3w takich jak Menu, Slider czy Number Input. Warto zwr\u00f3ci\u0107 uwag\u0119 no fakt, \u017ce oferowane maszyny stanowe enkapsuluj\u0105 r\u00f3wnie\u017c Accessablility, czyli aspekt na kt\u00f3ry w wi\u0119kszo\u015bci projekt\u00f3w nie ma czasu.<\/p>\n","innerContent":["\n<p>Biblioteka Zag opr\u00f3cz API do tworzenia w\u0142asnych maszyn stanowych udost\u0119pnia r\u00f3wnie\u017c zestaw maszyn stanowych dla najpopularniejszych prostych komponent\u00f3w takich jak Menu, Slider czy Number Input. Warto zwr\u00f3ci\u0107 uwag\u0119 no fakt, \u017ce oferowane maszyny stanowe enkapsuluj\u0105 r\u00f3wnie\u017c Accessablility, czyli aspekt na kt\u00f3ry w wi\u0119kszo\u015bci projekt\u00f3w nie ma czasu.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"prismatic\/blocks","attrs":[],"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-\">import * as numberInput from \"@zag-js\/number-input\"\nimport { useMachine, useSetup } from \"@zag-js\/react\"\n\nexport function NumberInput() {\n  const [state, send] = useMachine(numberInput.machine)\n  const ref = useSetup({ send, id: \"1\" })\n  const api = numberInput.connect(state, send)\n\n  return (\n    &lt;div ref={ref} {...api.rootProps}>\n      &lt;label {...api.labelProps}>Enter number:&lt;\/label>\n      &lt;div>\n        &lt;button {...api.decrementButtonProps}>DEC&lt;\/button>\n        &lt;input {...api.inputProps} \/>\n        &lt;button {...api.incrementButtonProps}>INC&lt;\/button>\n      &lt;\/div>\n    &lt;\/div>\n  )\n}<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-\">import * as numberInput from \"@zag-js\/number-input\"\nimport { useMachine, useSetup } from \"@zag-js\/react\"\n\nexport function NumberInput() {\n  const [state, send] = useMachine(numberInput.machine)\n  const ref = useSetup({ send, id: \"1\" })\n  const api = numberInput.connect(state, send)\n\n  return (\n    &lt;div ref={ref} {...api.rootProps}>\n      &lt;label {...api.labelProps}>Enter number:&lt;\/label>\n      &lt;div>\n        &lt;button {...api.decrementButtonProps}>DEC&lt;\/button>\n        &lt;input {...api.inputProps} \/>\n        &lt;button {...api.incrementButtonProps}>INC&lt;\/button>\n      &lt;\/div>\n    &lt;\/div>\n  )\n}<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>\u0179r\u00f3d\u0142a:<\/h3>\n","innerContent":["\n<h3>\u0179r\u00f3d\u0142a:<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><a href=\"https:\/\/zagjs.com\/\">https:\/\/zagjs.com\/<br><\/a><a href=\"https:\/\/zagjs.com\/components\/react\/number-input\">https:\/\/zagjs.com\/components\/react\/number-input<\/a><br><a href=\"https:\/\/zagjs.com\/overview\/whats-a-machine\">https:\/\/zagjs.com\/overview\/whats-a-machine<\/a><\/p>\n","innerContent":["\n<p><a href=\"https:\/\/zagjs.com\/\">https:\/\/zagjs.com\/<br><\/a><a href=\"https:\/\/zagjs.com\/components\/react\/number-input\">https:\/\/zagjs.com\/components\/react\/number-input<\/a><br><a href=\"https:\/\/zagjs.com\/overview\/whats-a-machine\">https:\/\/zagjs.com\/overview\/whats-a-machine<\/a><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>2. React Native Skia<\/h2>\n","innerContent":["\n<h2>2. React Native Skia<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Skia to otwarto\u017ar\u00f3d\u0142owy biblioteka do grafiki 2D rozwijana przez Shopify, kt\u00f3ra dostarcza API dzia\u0142aj\u0105ce na szerokiej gamie sprz\u0119tu. Skia mo\u017ce pochwali\u0107 si\u0119 imponuj\u0105cym portfolio wykorzystuj\u0105cych j\u0105 rozwi\u0105za\u0144. W galerii s\u0142aw znajdziemy takie tuzy jak Google Chrome, Chrome OS czy silnik renderowania Fluttera. Nied\u0142ugo lista ta mo\u017ce si\u0119 powi\u0119kszy\u0107, bo Shopify og\u0142osi\u0142o w minionym tygodniu bibliotek\u0119 integruj\u0105c\u0105 React Native i Skia.<\/p>\n","innerContent":["\n<p>Skia to otwarto\u017ar\u00f3d\u0142owy biblioteka do grafiki 2D rozwijana przez Shopify, kt\u00f3ra dostarcza API dzia\u0142aj\u0105ce na szerokiej gamie sprz\u0119tu. Skia mo\u017ce pochwali\u0107 si\u0119 imponuj\u0105cym portfolio wykorzystuj\u0105cych j\u0105 rozwi\u0105za\u0144. W galerii s\u0142aw znajdziemy takie tuzy jak Google Chrome, Chrome OS czy silnik renderowania Fluttera. Nied\u0142ugo lista ta mo\u017ce si\u0119 powi\u0119kszy\u0107, bo Shopify og\u0142osi\u0142o w minionym tygodniu bibliotek\u0119 integruj\u0105c\u0105 React Native i Skia.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"prismatic\/blocks","attrs":{"language":"javascript"},"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-javascript\">import {Skia, SkiaView, useDrawCallback} from \"@shopify\/react-native-skia\";\n \nexport const HelloWorld = () => {\n  const r = 128;\n  const onDraw = useDrawCallback((canvas) => {\n    const paint = Skia.Paint();\n    paint.setAntiAlias(true);\n    cyan.setColor(Skia.Color(\"cyan\"));\n    canvas.drawCircle(r, r, r, paint);\n  });\n  return (\n    &lt;SkiaView style={{ flex: 1 }} onDraw={onDraw} \/>\n  );\n};<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-javascript\">import {Skia, SkiaView, useDrawCallback} from \"@shopify\/react-native-skia\";\n \nexport const HelloWorld = () => {\n  const r = 128;\n  const onDraw = useDrawCallback((canvas) => {\n    const paint = Skia.Paint();\n    paint.setAntiAlias(true);\n    cyan.setColor(Skia.Color(\"cyan\"));\n    canvas.drawCircle(r, r, r, paint);\n  });\n  return (\n    &lt;SkiaView style={{ flex: 1 }} onDraw={onDraw} \/>\n  );\n};<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Skia dostarcza deweloperom troch\u0119 ekscytuj\u0105cych mo\u017cliwo\u015bci, ale jak dla mnie najbardziej interesuj\u0105ce s\u0105 plany Shopify dla React Native Skia. Jak si\u0119 okazuje nowo powsta\u0142e API jest w 100% kompatybilne z API Fluttera. W przysz\u0142o\u015bci ma to umo\u017cliwi\u0107 wykorzystanie silnika renderowania Fluttera dla weba do renderowania aplikacji React Native.<\/p>\n","innerContent":["\n<p>Skia dostarcza deweloperom troch\u0119 ekscytuj\u0105cych mo\u017cliwo\u015bci, ale jak dla mnie najbardziej interesuj\u0105ce s\u0105 plany Shopify dla React Native Skia. Jak si\u0119 okazuje nowo powsta\u0142e API jest w 100% kompatybilne z API Fluttera. W przysz\u0142o\u015bci ma to umo\u017cliwi\u0107 wykorzystanie silnika renderowania Fluttera dla weba do renderowania aplikacji React Native.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":4318,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/6f0ch7.jpeg\" alt=\"\" class=\"wp-image-4318\"\/><\/figure><\/div>\n","innerContent":["\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/6f0ch7.jpeg\" alt=\"\" class=\"wp-image-4318\"\/><\/figure><\/div>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Wykorzystanie wsp\u00f3lnego silnika renderowania przez React Native i Flutter brzmi troch\u0119\u2026 dziwnie. Je\u015bli Shopify uda si\u0119 przepchn\u0105\u0107 sw\u00f3j pomys\u0142 to mo\u017ce to doprowadzi\u0107 do dynamicznego rozwoju odnogi Skia opartej o WebAssembly. To jeszcze nie koniec standardowego HTML-a, ale by\u0107 mo\u017ce jeden z krok\u00f3w milowych w tym kierunku.<\/p>\n","innerContent":["\n<p>Wykorzystanie wsp\u00f3lnego silnika renderowania przez React Native i Flutter brzmi troch\u0119\u2026 dziwnie. Je\u015bli Shopify uda si\u0119 przepchn\u0105\u0107 sw\u00f3j pomys\u0142 to mo\u017ce to doprowadzi\u0107 do dynamicznego rozwoju odnogi Skia opartej o WebAssembly. To jeszcze nie koniec standardowego HTML-a, ale by\u0107 mo\u017ce jeden z krok\u00f3w milowych w tym kierunku.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":4319,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/6f0ct1.jpeg\" alt=\"\" class=\"wp-image-4319\"\/><figcaption>Tak d\u0142ugo jak problemy z powy\u017cszego mema nie zostan\u0105 zaadresowane, ja nie wierz\u0119 w przysz\u0142o\u015b\u0107 opart\u0105 o Canvas + WebAssembly.<\/figcaption><\/figure><\/div>\n","innerContent":["\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/6f0ct1.jpeg\" alt=\"\" class=\"wp-image-4319\"\/><figcaption>Tak d\u0142ugo jak problemy z powy\u017cszego mema nie zostan\u0105 zaadresowane, ja nie wierz\u0119 w przysz\u0142o\u015b\u0107 opart\u0105 o Canvas + WebAssembly.<\/figcaption><\/figure><\/div>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>\u0179r\u00f3d\u0142a:<\/h3>\n","innerContent":["\n<h3>\u0179r\u00f3d\u0142a:<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><a href=\"https:\/\/shopify.engineering\/react-native-skia-shopify\">https:\/\/shopify.engineering\/react-native-skia-shopify<\/a><\/p>\n","innerContent":["\n<p><a href=\"https:\/\/shopify.engineering\/react-native-skia-shopify\">https:\/\/shopify.engineering\/react-native-skia-shopify<\/a><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>3. Integracja Figmy ze Storybook<\/h2>\n","innerContent":["\n<h2>3. Integracja Figmy ze Storybook<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Osoba odpowiedzialna za PR Storybooka zdecydowanie zas\u0142uguje na podwy\u017ck\u0119. Informacje o nowo\u015bciach w ich flagowym produkcie rozchodz\u0105 si\u0119 po internecie viralowo. Nie tak dawno informowali\u015bmy Was o Lazy Loadingu, kt\u00f3ry trafi\u0142 do Storybook 6.5, a kilka dni temu firma zaprezentowa\u0142a kolejn\u0105 nowo\u015b\u0107. Tym razem pad\u0142o na plugin, kt\u00f3ry umo\u017cliwia po\u0142\u0105czenie designu komponent\u00f3w w Figmie z ich odpowiednikami w Storybook. Warto zaznaczy\u0107, \u017ce wtyczka powsta\u0142a we wsp\u00f3\u0142pracy z Figm\u0105 wi\u0119c oczekiwa\u0107 mo\u017cemy najwy\u017cszej jako\u015bci.<\/p>\n","innerContent":["\n<p>Osoba odpowiedzialna za PR Storybooka zdecydowanie zas\u0142uguje na podwy\u017ck\u0119. Informacje o nowo\u015bciach w ich flagowym produkcie rozchodz\u0105 si\u0119 po internecie viralowo. Nie tak dawno informowali\u015bmy Was o Lazy Loadingu, kt\u00f3ry trafi\u0142 do Storybook 6.5, a kilka dni temu firma zaprezentowa\u0142a kolejn\u0105 nowo\u015b\u0107. Tym razem pad\u0142o na plugin, kt\u00f3ry umo\u017cliwia po\u0142\u0105czenie designu komponent\u00f3w w Figmie z ich odpowiednikami w Storybook. Warto zaznaczy\u0107, \u017ce wtyczka powsta\u0142a we wsp\u00f3\u0142pracy z Figm\u0105 wi\u0119c oczekiwa\u0107 mo\u017cemy najwy\u017cszej jako\u015bci.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":4320,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/6f0d6i.jpeg\" alt=\"\" class=\"wp-image-4320\"\/><figcaption>Podgl\u0105d zaimplementowanego komponentu uruchamiany jest w interaktywnym trybie wewn\u0105trz Figmy, co pozwala w prosty spos\u00f3b por\u00f3wnywa\u0107 design z implementacj\u0105. Gdyby jeszcze w automatyczny spos\u00f3b\u00a0 zapewnia\u0142o to 100% zgodno\u015b\u0107 design\u00f3w z implementacj\u0105\u2026<\/figcaption><\/figure><\/div>\n","innerContent":["\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/6f0d6i.jpeg\" alt=\"\" class=\"wp-image-4320\"\/><figcaption>Podgl\u0105d zaimplementowanego komponentu uruchamiany jest w interaktywnym trybie wewn\u0105trz Figmy, co pozwala w prosty spos\u00f3b por\u00f3wnywa\u0107 design z implementacj\u0105. Gdyby jeszcze w automatyczny spos\u00f3b\u00a0 zapewnia\u0142o to 100% zgodno\u015b\u0107 design\u00f3w z implementacj\u0105\u2026<\/figcaption><\/figure><\/div>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>\u0179r\u00f3d\u0142a:<\/h3>\n","innerContent":["\n<h3>\u0179r\u00f3d\u0142a:<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><a href=\"https:\/\/storybook.js.org\/blog\/figma-plugin-for-storybook\/\">https:\/\/storybook.js.org\/blog\/figma-plugin-for-storybook\/<\/a><\/p>\n","innerContent":["\n<p><a href=\"https:\/\/storybook.js.org\/blog\/figma-plugin-for-storybook\/\">https:\/\/storybook.js.org\/blog\/figma-plugin-for-storybook\/<\/a><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>Bonus: Historia React Concurrent Features<\/h2>\n","innerContent":["\n<h2>Bonus: Historia React Concurrent Features<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Na zako\u0144czenie dzisiejszego przegl\u0105du chcia\u0142bym podzieli\u0107 si\u0119 z Wami pere\u0142k\u0105, jak\u0105 uda\u0142o mi si\u0119 wy\u0142owi\u0107 w tym tygodniu na YouTube. W zamieszczonym poni\u017cej filmie w telegraficznym skr\u00f3cie poznacie histori\u0119 React Concurrent Features (a historii tej jest troch\u0119, bo prace trwa\u0142y 2161 dni, czyli prawie 6 lat). I nie dajcie si\u0119 zmyli\u0107 pozorom, znajomo\u015b\u0107 korzeni wsp\u00f3\u0142bie\u017cno\u015bci w React to nie tylko wiedza, kt\u00f3r\u0105 pochwalicie si\u0119 na najbli\u017cszej kawie, ale te\u017c szansa na poznanie g\u0142\u0119bszego kontekstu nowych funkcjonalno\u015bci. Nie pami\u0119tam kiedy tak dobrze wykorzysta\u0142em 10 minut - naprawd\u0119 polecam!<\/p>\n","innerContent":["\n<p>Na zako\u0144czenie dzisiejszego przegl\u0105du chcia\u0142bym podzieli\u0107 si\u0119 z Wami pere\u0142k\u0105, jak\u0105 uda\u0142o mi si\u0119 wy\u0142owi\u0107 w tym tygodniu na YouTube. W zamieszczonym poni\u017cej filmie w telegraficznym skr\u00f3cie poznacie histori\u0119 React Concurrent Features (a historii tej jest troch\u0119, bo prace trwa\u0142y 2161 dni, czyli prawie 6 lat). I nie dajcie si\u0119 zmyli\u0107 pozorom, znajomo\u015b\u0107 korzeni wsp\u00f3\u0142bie\u017cno\u015bci w React to nie tylko wiedza, kt\u00f3r\u0105 pochwalicie si\u0119 na najbli\u017cszej kawie, ale te\u017c szansa na poznanie g\u0142\u0119bszego kontekstu nowych funkcjonalno\u015bci. Nie pami\u0119tam kiedy tak dobrze wykorzysta\u0142em 10 minut - naprawd\u0119 polecam!<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/embed","attrs":{"url":"https:\/\/www.youtube.com\/watch?v=NZoRlVi3MjQ","type":"video","providerNameSlug":"youtube","responsive":true,"align":"center","className":"wp-embed-aspect-16-9 wp-has-aspect-ratio"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-embed aligncenter is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/www.youtube.com\/watch?v=NZoRlVi3MjQ\n<\/div><\/figure>\n","innerContent":["\n<figure class=\"wp-block-embed aligncenter is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/www.youtube.com\/watch?v=NZoRlVi3MjQ\n<\/div><\/figure>\n"]}],"_links":{"self":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/9975","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/users\/12"}],"replies":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/comments?post=9975"}],"version-history":[{"count":1,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/9975\/revisions"}],"predecessor-version":[{"id":10501,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/9975\/revisions\/10501"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media\/8081"}],"wp:attachment":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media?parent=9975"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/categories?post=9975"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/tags?post=9975"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}