diff --git a/app/index.html b/app/index.html index c3d4ca4..b921e14 100644 --- a/app/index.html +++ b/app/index.html @@ -1,18 +1,13 @@ - + Posuzování shody dle MDR - - +
<%- script %> diff --git a/app/index.html b/app/index.html index c3d4ca4..b921e14 100644 --- a/app/index.html +++ b/app/index.html @@ -1,18 +1,13 @@ - + Posuzování shody dle MDR - - +
<%- script %> diff --git a/app/package.json b/app/package.json index 283a637..1f98d8f 100644 --- a/app/package.json +++ b/app/package.json @@ -1,19 +1,19 @@ { "private": true, "devDependencies": { - "@tailwindcss/forms": "^0.3.4", - "@tailwindcss/typography": "^0.4.1", - "postcss": "^8.3.11", + "@tailwindcss/forms": "^0.4.0", + "@tailwindcss/typography": "^0.5.1", + "autoprefixer": "^10.4.2", + "postcss": "^8.4.6", "postcss-import": "^14.0.2", "postcss-preset-env": "^7.0.1", "stylelint": "^14.1.0", "stylelint-config-recommended": "^6.0.0", "stylelint-config-standard": "^24.0.0", - "tailwindcss": "^2.2.19", - "autoprefixer": "^10.0.2", - "vite": "^2.6.14", - "vite-plugin-html": "^2.1.0", - "typescript": "4.2.4" + "tailwindcss": "^3.0.18", + "typescript": "4.2.4", + "vite": "^2.7.13", + "vite-plugin-html": "^3.0.3" }, "browserslist": [ "defaults" @@ -23,6 +23,5 @@ "build": "vite build", "serve": "vite preview" }, - "dependencies": { - } + "dependencies": {} } diff --git a/app/index.html b/app/index.html index c3d4ca4..b921e14 100644 --- a/app/index.html +++ b/app/index.html @@ -1,18 +1,13 @@ - + Posuzování shody dle MDR - - +
<%- script %> diff --git a/app/package.json b/app/package.json index 283a637..1f98d8f 100644 --- a/app/package.json +++ b/app/package.json @@ -1,19 +1,19 @@ { "private": true, "devDependencies": { - "@tailwindcss/forms": "^0.3.4", - "@tailwindcss/typography": "^0.4.1", - "postcss": "^8.3.11", + "@tailwindcss/forms": "^0.4.0", + "@tailwindcss/typography": "^0.5.1", + "autoprefixer": "^10.4.2", + "postcss": "^8.4.6", "postcss-import": "^14.0.2", "postcss-preset-env": "^7.0.1", "stylelint": "^14.1.0", "stylelint-config-recommended": "^6.0.0", "stylelint-config-standard": "^24.0.0", - "tailwindcss": "^2.2.19", - "autoprefixer": "^10.0.2", - "vite": "^2.6.14", - "vite-plugin-html": "^2.1.0", - "typescript": "4.2.4" + "tailwindcss": "^3.0.18", + "typescript": "4.2.4", + "vite": "^2.7.13", + "vite-plugin-html": "^3.0.3" }, "browserslist": [ "defaults" @@ -23,6 +23,5 @@ "build": "vite build", "serve": "vite preview" }, - "dependencies": { - } + "dependencies": {} } diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/Main.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/Main.scala deleted file mode 100644 index 017d6cb..0000000 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/Main.scala +++ /dev/null @@ -1,21 +0,0 @@ -package cz.e_bs.cmi.mdr.pdb - -import scala.scalajs.js.annotation.JSExportTopLevel -import scala.scalajs.js.annotation.JSExport -import org.scalajs.dom -import com.raquo.laminar.api.L.{*, given} - -@JSExportTopLevel("app") -object Main { - - @JSExport - def main(args: Array[String]): Unit = { - val appContainer = dom.document.querySelector("#app") - val appElement: Div = div( - h1("Hello"), - "Current time is:", - b("12:00") - ) - val root: RootNode = render(appContainer, appElement) - } -} diff --git a/app/index.html b/app/index.html index c3d4ca4..b921e14 100644 --- a/app/index.html +++ b/app/index.html @@ -1,18 +1,13 @@ - + Posuzování shody dle MDR - - +
<%- script %> diff --git a/app/package.json b/app/package.json index 283a637..1f98d8f 100644 --- a/app/package.json +++ b/app/package.json @@ -1,19 +1,19 @@ { "private": true, "devDependencies": { - "@tailwindcss/forms": "^0.3.4", - "@tailwindcss/typography": "^0.4.1", - "postcss": "^8.3.11", + "@tailwindcss/forms": "^0.4.0", + "@tailwindcss/typography": "^0.5.1", + "autoprefixer": "^10.4.2", + "postcss": "^8.4.6", "postcss-import": "^14.0.2", "postcss-preset-env": "^7.0.1", "stylelint": "^14.1.0", "stylelint-config-recommended": "^6.0.0", "stylelint-config-standard": "^24.0.0", - "tailwindcss": "^2.2.19", - "autoprefixer": "^10.0.2", - "vite": "^2.6.14", - "vite-plugin-html": "^2.1.0", - "typescript": "4.2.4" + "tailwindcss": "^3.0.18", + "typescript": "4.2.4", + "vite": "^2.7.13", + "vite-plugin-html": "^3.0.3" }, "browserslist": [ "defaults" @@ -23,6 +23,5 @@ "build": "vite build", "serve": "vite preview" }, - "dependencies": { - } + "dependencies": {} } diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/Main.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/Main.scala deleted file mode 100644 index 017d6cb..0000000 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/Main.scala +++ /dev/null @@ -1,21 +0,0 @@ -package cz.e_bs.cmi.mdr.pdb - -import scala.scalajs.js.annotation.JSExportTopLevel -import scala.scalajs.js.annotation.JSExport -import org.scalajs.dom -import com.raquo.laminar.api.L.{*, given} - -@JSExportTopLevel("app") -object Main { - - @JSExport - def main(args: Array[String]): Unit = { - val appContainer = dom.document.querySelector("#app") - val appElement: Div = div( - h1("Hello"), - "Current time is:", - b("12:00") - ) - val root: RootNode = render(appContainer, appElement) - } -} diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/Icons.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/Icons.scala new file mode 100644 index 0000000..b448dc6 --- /dev/null +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/Icons.scala @@ -0,0 +1,62 @@ +package cz.e_bs.cmi.mdr.pdb.app + +import com.raquo.laminar.api.L.svg.{*, given} +import com.raquo.domtypes.generic.defs.attrs.AriaAttrs +import com.raquo.laminar.keys.ReactiveSvgAttr +import com.raquo.laminar.builders.SvgBuilders +import com.raquo.domtypes.generic.codecs.BooleanAsTrueFalseStringCodec + +object Icons { + object aria { + val hidden = customSvgAttr("aria-hidden", BooleanAsTrueFalseStringCodec) + } + + object outline { + val bell = + // + svg( + cls := "h-6 w-6", + xmlns := "http://www.w3.org/2000/svg", + fill := "none", + viewBox := "0 0 24 24", + stroke := "currentColor", + aria.hidden := true, + path( + strokeLineCap := "round", + strokeLineJoin := "round", + strokeWidth := "2", + d := "M15 17h5l-1.405-1.405A2.032 2.032 0 0118 14.158V11a6.002 6.002 0 00-4-5.659V5a2 2 0 10-4 0v.341C7.67 6.165 6 8.388 6 11v3.159c0 .538-.214 1.055-.595 1.436L4 17h5m6 0v1a3 3 0 11-6 0v-1m6 0H9" + ) + ) + + val menu = svg( + cls := "block h-6 w-6", + xmlns := "http://www.w3.org/2000/svg", + fill := "none", + viewBox := "0 0 24 24", + stroke := "currentColor", + aria.hidden := true, + path( + strokeLineCap := "round", + strokeLineJoin := "round", + strokeWidth := "2", + d := "M4 6h16M4 12h16M4 18h16" + ) + ) + val x = + svg( + cls := "hidden h-6 w-6", + xmlns := "http://www.w3.org/2000/svg", + fill := "none", + viewBox := "0 0 24 24", + stroke := "currentColor", + aria.hidden := true, + path( + strokeLineCap := "round", + strokeLineJoin := "round", + strokeWidth := "2", + d := "M6 18L18 6M6 6l12 12" + ) + ) + } +} diff --git a/app/index.html b/app/index.html index c3d4ca4..b921e14 100644 --- a/app/index.html +++ b/app/index.html @@ -1,18 +1,13 @@ - + Posuzování shody dle MDR - - +
<%- script %> diff --git a/app/package.json b/app/package.json index 283a637..1f98d8f 100644 --- a/app/package.json +++ b/app/package.json @@ -1,19 +1,19 @@ { "private": true, "devDependencies": { - "@tailwindcss/forms": "^0.3.4", - "@tailwindcss/typography": "^0.4.1", - "postcss": "^8.3.11", + "@tailwindcss/forms": "^0.4.0", + "@tailwindcss/typography": "^0.5.1", + "autoprefixer": "^10.4.2", + "postcss": "^8.4.6", "postcss-import": "^14.0.2", "postcss-preset-env": "^7.0.1", "stylelint": "^14.1.0", "stylelint-config-recommended": "^6.0.0", "stylelint-config-standard": "^24.0.0", - "tailwindcss": "^2.2.19", - "autoprefixer": "^10.0.2", - "vite": "^2.6.14", - "vite-plugin-html": "^2.1.0", - "typescript": "4.2.4" + "tailwindcss": "^3.0.18", + "typescript": "4.2.4", + "vite": "^2.7.13", + "vite-plugin-html": "^3.0.3" }, "browserslist": [ "defaults" @@ -23,6 +23,5 @@ "build": "vite build", "serve": "vite preview" }, - "dependencies": { - } + "dependencies": {} } diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/Main.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/Main.scala deleted file mode 100644 index 017d6cb..0000000 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/Main.scala +++ /dev/null @@ -1,21 +0,0 @@ -package cz.e_bs.cmi.mdr.pdb - -import scala.scalajs.js.annotation.JSExportTopLevel -import scala.scalajs.js.annotation.JSExport -import org.scalajs.dom -import com.raquo.laminar.api.L.{*, given} - -@JSExportTopLevel("app") -object Main { - - @JSExport - def main(args: Array[String]): Unit = { - val appContainer = dom.document.querySelector("#app") - val appElement: Div = div( - h1("Hello"), - "Current time is:", - b("12:00") - ) - val root: RootNode = render(appContainer, appElement) - } -} diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/Icons.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/Icons.scala new file mode 100644 index 0000000..b448dc6 --- /dev/null +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/Icons.scala @@ -0,0 +1,62 @@ +package cz.e_bs.cmi.mdr.pdb.app + +import com.raquo.laminar.api.L.svg.{*, given} +import com.raquo.domtypes.generic.defs.attrs.AriaAttrs +import com.raquo.laminar.keys.ReactiveSvgAttr +import com.raquo.laminar.builders.SvgBuilders +import com.raquo.domtypes.generic.codecs.BooleanAsTrueFalseStringCodec + +object Icons { + object aria { + val hidden = customSvgAttr("aria-hidden", BooleanAsTrueFalseStringCodec) + } + + object outline { + val bell = + // + svg( + cls := "h-6 w-6", + xmlns := "http://www.w3.org/2000/svg", + fill := "none", + viewBox := "0 0 24 24", + stroke := "currentColor", + aria.hidden := true, + path( + strokeLineCap := "round", + strokeLineJoin := "round", + strokeWidth := "2", + d := "M15 17h5l-1.405-1.405A2.032 2.032 0 0118 14.158V11a6.002 6.002 0 00-4-5.659V5a2 2 0 10-4 0v.341C7.67 6.165 6 8.388 6 11v3.159c0 .538-.214 1.055-.595 1.436L4 17h5m6 0v1a3 3 0 11-6 0v-1m6 0H9" + ) + ) + + val menu = svg( + cls := "block h-6 w-6", + xmlns := "http://www.w3.org/2000/svg", + fill := "none", + viewBox := "0 0 24 24", + stroke := "currentColor", + aria.hidden := true, + path( + strokeLineCap := "round", + strokeLineJoin := "round", + strokeWidth := "2", + d := "M4 6h16M4 12h16M4 18h16" + ) + ) + val x = + svg( + cls := "hidden h-6 w-6", + xmlns := "http://www.w3.org/2000/svg", + fill := "none", + viewBox := "0 0 24 24", + stroke := "currentColor", + aria.hidden := true, + path( + strokeLineCap := "round", + strokeLineJoin := "round", + strokeWidth := "2", + d := "M6 18L18 6M6 6l12 12" + ) + ) + } +} diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/Layout.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/Layout.scala new file mode 100644 index 0000000..a801746 --- /dev/null +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/Layout.scala @@ -0,0 +1,259 @@ +package cz.e_bs.cmi.mdr.pdb.app + +import com.raquo.laminar.api.L.{*, given} +import com.raquo.domtypes.generic.codecs.StringAsIsCodec + +object Layout { + val ariaCurrent = customProp("aria-current", StringAsIsCodec) + + def layout(content: HtmlElement): HtmlElement = + div( + cls := "min-h-full", + nav( + cls := "bg-indigo-600", + div( + cls := "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8", + div( + cls := "flex items-center justify-between h-16", + div( + cls := "flex items-center", + div( + cls := "flex-shrink-0", + img( + cls := "h-8 w-8", + src := "https://tailwindui.com/img/logos/workflow-mark-indigo-300.svg", + alt := "Workflow" + ) + ), + div( + cls := "hidden md:block", + div( + cls := "ml-10 flex items-baseline space-x-4", + // + a( + href := "#", + cls := "bg-indigo-700 text-white px-3 py-2 rounded-md text-sm font-medium", + ariaCurrent := "page", + "Dashboard" + ), + a( + href := "#", + cls := "text-white hover:bg-indigo-500 hover:bg-opacity-75 px-3 py-2 rounded-md text-sm font-medium", + "Team" + ), + a( + href := "#", + cls := "text-white hover:bg-indigo-500 hover:bg-opacity-75 px-3 py-2 rounded-md text-sm font-medium", + "Projects" + ), + a( + href := "#", + cls := "text-white hover:bg-indigo-500 hover:bg-opacity-75 px-3 py-2 rounded-md text-sm font-medium", + "Calendar" + ), + a( + href := "#", + cls := "text-white hover:bg-indigo-500 hover:bg-opacity-75 px-3 py-2 rounded-md text-sm font-medium", + "Reports" + ) + ) + ) + ), + div( + cls := "hidden md:block", + div( + cls := "ml-4 flex items-center md:ml-6", + button( + tpe := "button", + cls := "p-1 bg-indigo-600 rounded-full text-indigo-200 hover:text-white focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-indigo-600 focus:ring-white", + span(cls := "sr-only", "View notifications"), + Icons.outline.bell + ), + + // + div( + cls := "ml-3 relative", + div( + button( + tpe := "button", + cls := "max-w-xs bg-indigo-600 rounded-full flex items-center text-sm focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-indigo-600 focus:ring-white", + idAttr := "user-menu-button", + aria.expanded := false, + aria.hasPopup := true, + span(cls := "sr-only", "Open user menu"), + img( + cls := "h-8 w-8 rounded-full", + src := "https://images.unsplash.com/photo-1472099645785-5658abf4ff4e?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=facearea&facepad=2&w=256&h=256&q=80", + alt := "" + ) + ) + ), + /* + * */ + div( + cls := "origin-top-right absolute right-0 mt-2 w-48 rounded-md shadow-lg py-1 bg-white ring-1 ring-black ring-opacity-5 focus:outline-none", + role := "menu", + aria.orientation := "vertical", + aria.labelledBy := "user-menu-button", + tabIndex := -1, + // + a( + href := "#", + cls := "block px-4 py-2 text-sm text-gray-700", + role := "menuitem", + tabIndex := -1, + idAttr := "user-menu-item-0", + "Your Profile" + ), + a( + href := "#", + cls := "block px-4 py-2 text-sm text-gray-700", + role := "menuitem", + tabIndex := -1, + idAttr := "user-menu-item-1", + "Settings" + ), + a( + href := "#", + cls := "block px-4 py-2 text-sm text-gray-700", + role := "menuitem", + tabIndex := -1, + idAttr := "user-menu-item-2", + "Sign out" + ) + ) + ) + ) + ), + div( + cls := "-mr-2 flex md:hidden", + // + button( + tpe := "button", + cls := "bg-indigo-600 inline-flex items-center justify-center p-2 rounded-md text-indigo-200 hover:text-white hover:bg-indigo-500 hover:bg-opacity-75 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-indigo-600 focus:ring-white", + aria.controls := "mobile-menu", + aria.expanded := false, + span(cls := "sr-only", "Open main menu"), + Icons.outline.menu, + Icons.outline.x + ) + ) + ) + ), + + // + div( + cls := "md:hidden", + idAttr := "mobile-menu", + div( + cls := "px-2 pt-2 pb-3 space-y-1 sm:px-3", + // + a( + href := "#", + cls := "bg-indigo-700 text-white block px-3 py-2 rounded-md text-base font-medium", + ariaCurrent := "page", + "Dashboard" + ), + a( + href := "#", + cls := "text-white hover:bg-indigo-500 hover:bg-opacity-75 block px-3 py-2 rounded-md text-base font-medium", + "Team" + ), + a( + href := "#", + cls := "text-white hover:bg-indigo-500 hover:bg-opacity-75 block px-3 py-2 rounded-md text-base font-medium", + "Projects" + ), + a( + href := "#", + cls := "text-white hover:bg-indigo-500 hover:bg-opacity-75 block px-3 py-2 rounded-md text-base font-medium", + "Calendar" + ), + a( + href := "#", + cls := "text-white hover:bg-indigo-500 hover:bg-opacity-75 block px-3 py-2 rounded-md text-base font-medium", + "Reports" + ) + ), + div( + cls := "pt-4 pb-3 border-t border-indigo-700", + div( + cls := "flex items-center px-5", + div( + cls := "flex-shrink-0", + img( + cls := "h-10 w-10 rounded-full", + src := "https://images.unsplash.com/photo-1472099645785-5658abf4ff4e?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=facearea&facepad=2&w=256&h=256&q=80", + alt := "" + ) + ), + div( + cls := "ml-3", + div(cls := "text-base font-medium text-white", "Tom Cook"), + div( + cls := "text-sm font-medium text-indigo-300", + "tom@example.com" + ) + ), + button( + tpe := "button", + cls := "ml-auto bg-indigo-600 flex-shrink-0 p-1 rounded-full text-indigo-200 hover:text-white focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-indigo-600 focus:ring-white", + span(cls := "sr-only", "View notifications"), + Icons.outline.bell + ) + ), + div( + cls := "mt-3 px-2 space-y-1", + a( + href := "#", + cls := "block px-3 py-2 rounded-md text-base font-medium text-white hover:bg-indigo-500 hover:bg-opacity-75", + "Your Profile" + ), + a( + href := "#", + cls := "block px-3 py-2 rounded-md text-base font-medium text-white hover:bg-indigo-500 hover:bg-opacity-75", + "Settings" + ), + a( + href := "#", + cls := "block px-3 py-2 rounded-md text-base font-medium text-white hover:bg-indigo-500 hover:bg-opacity-75", + "Sign out" + ) + ) + ) + ) + ), + header( + cls := "bg-white shadow-sm", + div( + cls := "max-w-7xl mx-auto py-4 px-4 sm:px-6 lg:px-8", + h1( + cls := "text-lg leading-6 font-semibold text-gray-900", + "Dashboard" + ) + ) + ), + main( + div( + cls := "max-w-7xl mx-auto py-6 sm:px-6 lg:px-8", + // + div( + cls := "px-4 py-4 sm:px-0", + div( + cls := "border-4 border-dashed border-gray-200 rounded-lg h-96", + content + ) + ) + // + ) + ) + ) +} diff --git a/app/index.html b/app/index.html index c3d4ca4..b921e14 100644 --- a/app/index.html +++ b/app/index.html @@ -1,18 +1,13 @@ - + Posuzování shody dle MDR - - +
<%- script %> diff --git a/app/package.json b/app/package.json index 283a637..1f98d8f 100644 --- a/app/package.json +++ b/app/package.json @@ -1,19 +1,19 @@ { "private": true, "devDependencies": { - "@tailwindcss/forms": "^0.3.4", - "@tailwindcss/typography": "^0.4.1", - "postcss": "^8.3.11", + "@tailwindcss/forms": "^0.4.0", + "@tailwindcss/typography": "^0.5.1", + "autoprefixer": "^10.4.2", + "postcss": "^8.4.6", "postcss-import": "^14.0.2", "postcss-preset-env": "^7.0.1", "stylelint": "^14.1.0", "stylelint-config-recommended": "^6.0.0", "stylelint-config-standard": "^24.0.0", - "tailwindcss": "^2.2.19", - "autoprefixer": "^10.0.2", - "vite": "^2.6.14", - "vite-plugin-html": "^2.1.0", - "typescript": "4.2.4" + "tailwindcss": "^3.0.18", + "typescript": "4.2.4", + "vite": "^2.7.13", + "vite-plugin-html": "^3.0.3" }, "browserslist": [ "defaults" @@ -23,6 +23,5 @@ "build": "vite build", "serve": "vite preview" }, - "dependencies": { - } + "dependencies": {} } diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/Main.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/Main.scala deleted file mode 100644 index 017d6cb..0000000 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/Main.scala +++ /dev/null @@ -1,21 +0,0 @@ -package cz.e_bs.cmi.mdr.pdb - -import scala.scalajs.js.annotation.JSExportTopLevel -import scala.scalajs.js.annotation.JSExport -import org.scalajs.dom -import com.raquo.laminar.api.L.{*, given} - -@JSExportTopLevel("app") -object Main { - - @JSExport - def main(args: Array[String]): Unit = { - val appContainer = dom.document.querySelector("#app") - val appElement: Div = div( - h1("Hello"), - "Current time is:", - b("12:00") - ) - val root: RootNode = render(appContainer, appElement) - } -} diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/Icons.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/Icons.scala new file mode 100644 index 0000000..b448dc6 --- /dev/null +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/Icons.scala @@ -0,0 +1,62 @@ +package cz.e_bs.cmi.mdr.pdb.app + +import com.raquo.laminar.api.L.svg.{*, given} +import com.raquo.domtypes.generic.defs.attrs.AriaAttrs +import com.raquo.laminar.keys.ReactiveSvgAttr +import com.raquo.laminar.builders.SvgBuilders +import com.raquo.domtypes.generic.codecs.BooleanAsTrueFalseStringCodec + +object Icons { + object aria { + val hidden = customSvgAttr("aria-hidden", BooleanAsTrueFalseStringCodec) + } + + object outline { + val bell = + // + svg( + cls := "h-6 w-6", + xmlns := "http://www.w3.org/2000/svg", + fill := "none", + viewBox := "0 0 24 24", + stroke := "currentColor", + aria.hidden := true, + path( + strokeLineCap := "round", + strokeLineJoin := "round", + strokeWidth := "2", + d := "M15 17h5l-1.405-1.405A2.032 2.032 0 0118 14.158V11a6.002 6.002 0 00-4-5.659V5a2 2 0 10-4 0v.341C7.67 6.165 6 8.388 6 11v3.159c0 .538-.214 1.055-.595 1.436L4 17h5m6 0v1a3 3 0 11-6 0v-1m6 0H9" + ) + ) + + val menu = svg( + cls := "block h-6 w-6", + xmlns := "http://www.w3.org/2000/svg", + fill := "none", + viewBox := "0 0 24 24", + stroke := "currentColor", + aria.hidden := true, + path( + strokeLineCap := "round", + strokeLineJoin := "round", + strokeWidth := "2", + d := "M4 6h16M4 12h16M4 18h16" + ) + ) + val x = + svg( + cls := "hidden h-6 w-6", + xmlns := "http://www.w3.org/2000/svg", + fill := "none", + viewBox := "0 0 24 24", + stroke := "currentColor", + aria.hidden := true, + path( + strokeLineCap := "round", + strokeLineJoin := "round", + strokeWidth := "2", + d := "M6 18L18 6M6 6l12 12" + ) + ) + } +} diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/Layout.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/Layout.scala new file mode 100644 index 0000000..a801746 --- /dev/null +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/Layout.scala @@ -0,0 +1,259 @@ +package cz.e_bs.cmi.mdr.pdb.app + +import com.raquo.laminar.api.L.{*, given} +import com.raquo.domtypes.generic.codecs.StringAsIsCodec + +object Layout { + val ariaCurrent = customProp("aria-current", StringAsIsCodec) + + def layout(content: HtmlElement): HtmlElement = + div( + cls := "min-h-full", + nav( + cls := "bg-indigo-600", + div( + cls := "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8", + div( + cls := "flex items-center justify-between h-16", + div( + cls := "flex items-center", + div( + cls := "flex-shrink-0", + img( + cls := "h-8 w-8", + src := "https://tailwindui.com/img/logos/workflow-mark-indigo-300.svg", + alt := "Workflow" + ) + ), + div( + cls := "hidden md:block", + div( + cls := "ml-10 flex items-baseline space-x-4", + // + a( + href := "#", + cls := "bg-indigo-700 text-white px-3 py-2 rounded-md text-sm font-medium", + ariaCurrent := "page", + "Dashboard" + ), + a( + href := "#", + cls := "text-white hover:bg-indigo-500 hover:bg-opacity-75 px-3 py-2 rounded-md text-sm font-medium", + "Team" + ), + a( + href := "#", + cls := "text-white hover:bg-indigo-500 hover:bg-opacity-75 px-3 py-2 rounded-md text-sm font-medium", + "Projects" + ), + a( + href := "#", + cls := "text-white hover:bg-indigo-500 hover:bg-opacity-75 px-3 py-2 rounded-md text-sm font-medium", + "Calendar" + ), + a( + href := "#", + cls := "text-white hover:bg-indigo-500 hover:bg-opacity-75 px-3 py-2 rounded-md text-sm font-medium", + "Reports" + ) + ) + ) + ), + div( + cls := "hidden md:block", + div( + cls := "ml-4 flex items-center md:ml-6", + button( + tpe := "button", + cls := "p-1 bg-indigo-600 rounded-full text-indigo-200 hover:text-white focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-indigo-600 focus:ring-white", + span(cls := "sr-only", "View notifications"), + Icons.outline.bell + ), + + // + div( + cls := "ml-3 relative", + div( + button( + tpe := "button", + cls := "max-w-xs bg-indigo-600 rounded-full flex items-center text-sm focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-indigo-600 focus:ring-white", + idAttr := "user-menu-button", + aria.expanded := false, + aria.hasPopup := true, + span(cls := "sr-only", "Open user menu"), + img( + cls := "h-8 w-8 rounded-full", + src := "https://images.unsplash.com/photo-1472099645785-5658abf4ff4e?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=facearea&facepad=2&w=256&h=256&q=80", + alt := "" + ) + ) + ), + /* + * */ + div( + cls := "origin-top-right absolute right-0 mt-2 w-48 rounded-md shadow-lg py-1 bg-white ring-1 ring-black ring-opacity-5 focus:outline-none", + role := "menu", + aria.orientation := "vertical", + aria.labelledBy := "user-menu-button", + tabIndex := -1, + // + a( + href := "#", + cls := "block px-4 py-2 text-sm text-gray-700", + role := "menuitem", + tabIndex := -1, + idAttr := "user-menu-item-0", + "Your Profile" + ), + a( + href := "#", + cls := "block px-4 py-2 text-sm text-gray-700", + role := "menuitem", + tabIndex := -1, + idAttr := "user-menu-item-1", + "Settings" + ), + a( + href := "#", + cls := "block px-4 py-2 text-sm text-gray-700", + role := "menuitem", + tabIndex := -1, + idAttr := "user-menu-item-2", + "Sign out" + ) + ) + ) + ) + ), + div( + cls := "-mr-2 flex md:hidden", + // + button( + tpe := "button", + cls := "bg-indigo-600 inline-flex items-center justify-center p-2 rounded-md text-indigo-200 hover:text-white hover:bg-indigo-500 hover:bg-opacity-75 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-indigo-600 focus:ring-white", + aria.controls := "mobile-menu", + aria.expanded := false, + span(cls := "sr-only", "Open main menu"), + Icons.outline.menu, + Icons.outline.x + ) + ) + ) + ), + + // + div( + cls := "md:hidden", + idAttr := "mobile-menu", + div( + cls := "px-2 pt-2 pb-3 space-y-1 sm:px-3", + // + a( + href := "#", + cls := "bg-indigo-700 text-white block px-3 py-2 rounded-md text-base font-medium", + ariaCurrent := "page", + "Dashboard" + ), + a( + href := "#", + cls := "text-white hover:bg-indigo-500 hover:bg-opacity-75 block px-3 py-2 rounded-md text-base font-medium", + "Team" + ), + a( + href := "#", + cls := "text-white hover:bg-indigo-500 hover:bg-opacity-75 block px-3 py-2 rounded-md text-base font-medium", + "Projects" + ), + a( + href := "#", + cls := "text-white hover:bg-indigo-500 hover:bg-opacity-75 block px-3 py-2 rounded-md text-base font-medium", + "Calendar" + ), + a( + href := "#", + cls := "text-white hover:bg-indigo-500 hover:bg-opacity-75 block px-3 py-2 rounded-md text-base font-medium", + "Reports" + ) + ), + div( + cls := "pt-4 pb-3 border-t border-indigo-700", + div( + cls := "flex items-center px-5", + div( + cls := "flex-shrink-0", + img( + cls := "h-10 w-10 rounded-full", + src := "https://images.unsplash.com/photo-1472099645785-5658abf4ff4e?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=facearea&facepad=2&w=256&h=256&q=80", + alt := "" + ) + ), + div( + cls := "ml-3", + div(cls := "text-base font-medium text-white", "Tom Cook"), + div( + cls := "text-sm font-medium text-indigo-300", + "tom@example.com" + ) + ), + button( + tpe := "button", + cls := "ml-auto bg-indigo-600 flex-shrink-0 p-1 rounded-full text-indigo-200 hover:text-white focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-indigo-600 focus:ring-white", + span(cls := "sr-only", "View notifications"), + Icons.outline.bell + ) + ), + div( + cls := "mt-3 px-2 space-y-1", + a( + href := "#", + cls := "block px-3 py-2 rounded-md text-base font-medium text-white hover:bg-indigo-500 hover:bg-opacity-75", + "Your Profile" + ), + a( + href := "#", + cls := "block px-3 py-2 rounded-md text-base font-medium text-white hover:bg-indigo-500 hover:bg-opacity-75", + "Settings" + ), + a( + href := "#", + cls := "block px-3 py-2 rounded-md text-base font-medium text-white hover:bg-indigo-500 hover:bg-opacity-75", + "Sign out" + ) + ) + ) + ) + ), + header( + cls := "bg-white shadow-sm", + div( + cls := "max-w-7xl mx-auto py-4 px-4 sm:px-6 lg:px-8", + h1( + cls := "text-lg leading-6 font-semibold text-gray-900", + "Dashboard" + ) + ) + ), + main( + div( + cls := "max-w-7xl mx-auto py-6 sm:px-6 lg:px-8", + // + div( + cls := "px-4 py-4 sm:px-0", + div( + cls := "border-4 border-dashed border-gray-200 rounded-lg h-96", + content + ) + ) + // + ) + ) + ) +} diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/Main.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/Main.scala new file mode 100644 index 0000000..247d211 --- /dev/null +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/Main.scala @@ -0,0 +1,32 @@ +package cz.e_bs.cmi.mdr.pdb.app + +import scala.scalajs.js.annotation.JSExportTopLevel +import scala.scalajs.js.annotation.JSExport +import scala.scalajs.js.annotation.JSImport +import scala.scalajs.js +import org.scalajs.dom +import com.raquo.laminar.api.L.{*, given} +import scala.scalajs.js.Date + +@js.native +@JSImport("stylesheets/main.css", JSImport.Namespace) +object Css extends js.Any + +@JSExportTopLevel("app") +object Main { + + // Pull in the stylesheet + val css: Css.type = Css + + @JSExport + def main(args: Array[String]): Unit = { + val appContainer = dom.document.querySelector("#app") + val $time = EventStream.periodic(1000).mapTo(new Date().toTimeString) + val appElement: Div = div( + h1("Hello"), + "Current time is: ", + b(child.text <-- $time) + ) + val root: RootNode = render(appContainer, Layout.layout(appElement)) + } +} diff --git a/app/index.html b/app/index.html index c3d4ca4..b921e14 100644 --- a/app/index.html +++ b/app/index.html @@ -1,18 +1,13 @@ - + Posuzování shody dle MDR - - +
<%- script %> diff --git a/app/package.json b/app/package.json index 283a637..1f98d8f 100644 --- a/app/package.json +++ b/app/package.json @@ -1,19 +1,19 @@ { "private": true, "devDependencies": { - "@tailwindcss/forms": "^0.3.4", - "@tailwindcss/typography": "^0.4.1", - "postcss": "^8.3.11", + "@tailwindcss/forms": "^0.4.0", + "@tailwindcss/typography": "^0.5.1", + "autoprefixer": "^10.4.2", + "postcss": "^8.4.6", "postcss-import": "^14.0.2", "postcss-preset-env": "^7.0.1", "stylelint": "^14.1.0", "stylelint-config-recommended": "^6.0.0", "stylelint-config-standard": "^24.0.0", - "tailwindcss": "^2.2.19", - "autoprefixer": "^10.0.2", - "vite": "^2.6.14", - "vite-plugin-html": "^2.1.0", - "typescript": "4.2.4" + "tailwindcss": "^3.0.18", + "typescript": "4.2.4", + "vite": "^2.7.13", + "vite-plugin-html": "^3.0.3" }, "browserslist": [ "defaults" @@ -23,6 +23,5 @@ "build": "vite build", "serve": "vite preview" }, - "dependencies": { - } + "dependencies": {} } diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/Main.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/Main.scala deleted file mode 100644 index 017d6cb..0000000 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/Main.scala +++ /dev/null @@ -1,21 +0,0 @@ -package cz.e_bs.cmi.mdr.pdb - -import scala.scalajs.js.annotation.JSExportTopLevel -import scala.scalajs.js.annotation.JSExport -import org.scalajs.dom -import com.raquo.laminar.api.L.{*, given} - -@JSExportTopLevel("app") -object Main { - - @JSExport - def main(args: Array[String]): Unit = { - val appContainer = dom.document.querySelector("#app") - val appElement: Div = div( - h1("Hello"), - "Current time is:", - b("12:00") - ) - val root: RootNode = render(appContainer, appElement) - } -} diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/Icons.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/Icons.scala new file mode 100644 index 0000000..b448dc6 --- /dev/null +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/Icons.scala @@ -0,0 +1,62 @@ +package cz.e_bs.cmi.mdr.pdb.app + +import com.raquo.laminar.api.L.svg.{*, given} +import com.raquo.domtypes.generic.defs.attrs.AriaAttrs +import com.raquo.laminar.keys.ReactiveSvgAttr +import com.raquo.laminar.builders.SvgBuilders +import com.raquo.domtypes.generic.codecs.BooleanAsTrueFalseStringCodec + +object Icons { + object aria { + val hidden = customSvgAttr("aria-hidden", BooleanAsTrueFalseStringCodec) + } + + object outline { + val bell = + // + svg( + cls := "h-6 w-6", + xmlns := "http://www.w3.org/2000/svg", + fill := "none", + viewBox := "0 0 24 24", + stroke := "currentColor", + aria.hidden := true, + path( + strokeLineCap := "round", + strokeLineJoin := "round", + strokeWidth := "2", + d := "M15 17h5l-1.405-1.405A2.032 2.032 0 0118 14.158V11a6.002 6.002 0 00-4-5.659V5a2 2 0 10-4 0v.341C7.67 6.165 6 8.388 6 11v3.159c0 .538-.214 1.055-.595 1.436L4 17h5m6 0v1a3 3 0 11-6 0v-1m6 0H9" + ) + ) + + val menu = svg( + cls := "block h-6 w-6", + xmlns := "http://www.w3.org/2000/svg", + fill := "none", + viewBox := "0 0 24 24", + stroke := "currentColor", + aria.hidden := true, + path( + strokeLineCap := "round", + strokeLineJoin := "round", + strokeWidth := "2", + d := "M4 6h16M4 12h16M4 18h16" + ) + ) + val x = + svg( + cls := "hidden h-6 w-6", + xmlns := "http://www.w3.org/2000/svg", + fill := "none", + viewBox := "0 0 24 24", + stroke := "currentColor", + aria.hidden := true, + path( + strokeLineCap := "round", + strokeLineJoin := "round", + strokeWidth := "2", + d := "M6 18L18 6M6 6l12 12" + ) + ) + } +} diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/Layout.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/Layout.scala new file mode 100644 index 0000000..a801746 --- /dev/null +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/Layout.scala @@ -0,0 +1,259 @@ +package cz.e_bs.cmi.mdr.pdb.app + +import com.raquo.laminar.api.L.{*, given} +import com.raquo.domtypes.generic.codecs.StringAsIsCodec + +object Layout { + val ariaCurrent = customProp("aria-current", StringAsIsCodec) + + def layout(content: HtmlElement): HtmlElement = + div( + cls := "min-h-full", + nav( + cls := "bg-indigo-600", + div( + cls := "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8", + div( + cls := "flex items-center justify-between h-16", + div( + cls := "flex items-center", + div( + cls := "flex-shrink-0", + img( + cls := "h-8 w-8", + src := "https://tailwindui.com/img/logos/workflow-mark-indigo-300.svg", + alt := "Workflow" + ) + ), + div( + cls := "hidden md:block", + div( + cls := "ml-10 flex items-baseline space-x-4", + // + a( + href := "#", + cls := "bg-indigo-700 text-white px-3 py-2 rounded-md text-sm font-medium", + ariaCurrent := "page", + "Dashboard" + ), + a( + href := "#", + cls := "text-white hover:bg-indigo-500 hover:bg-opacity-75 px-3 py-2 rounded-md text-sm font-medium", + "Team" + ), + a( + href := "#", + cls := "text-white hover:bg-indigo-500 hover:bg-opacity-75 px-3 py-2 rounded-md text-sm font-medium", + "Projects" + ), + a( + href := "#", + cls := "text-white hover:bg-indigo-500 hover:bg-opacity-75 px-3 py-2 rounded-md text-sm font-medium", + "Calendar" + ), + a( + href := "#", + cls := "text-white hover:bg-indigo-500 hover:bg-opacity-75 px-3 py-2 rounded-md text-sm font-medium", + "Reports" + ) + ) + ) + ), + div( + cls := "hidden md:block", + div( + cls := "ml-4 flex items-center md:ml-6", + button( + tpe := "button", + cls := "p-1 bg-indigo-600 rounded-full text-indigo-200 hover:text-white focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-indigo-600 focus:ring-white", + span(cls := "sr-only", "View notifications"), + Icons.outline.bell + ), + + // + div( + cls := "ml-3 relative", + div( + button( + tpe := "button", + cls := "max-w-xs bg-indigo-600 rounded-full flex items-center text-sm focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-indigo-600 focus:ring-white", + idAttr := "user-menu-button", + aria.expanded := false, + aria.hasPopup := true, + span(cls := "sr-only", "Open user menu"), + img( + cls := "h-8 w-8 rounded-full", + src := "https://images.unsplash.com/photo-1472099645785-5658abf4ff4e?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=facearea&facepad=2&w=256&h=256&q=80", + alt := "" + ) + ) + ), + /* + * */ + div( + cls := "origin-top-right absolute right-0 mt-2 w-48 rounded-md shadow-lg py-1 bg-white ring-1 ring-black ring-opacity-5 focus:outline-none", + role := "menu", + aria.orientation := "vertical", + aria.labelledBy := "user-menu-button", + tabIndex := -1, + // + a( + href := "#", + cls := "block px-4 py-2 text-sm text-gray-700", + role := "menuitem", + tabIndex := -1, + idAttr := "user-menu-item-0", + "Your Profile" + ), + a( + href := "#", + cls := "block px-4 py-2 text-sm text-gray-700", + role := "menuitem", + tabIndex := -1, + idAttr := "user-menu-item-1", + "Settings" + ), + a( + href := "#", + cls := "block px-4 py-2 text-sm text-gray-700", + role := "menuitem", + tabIndex := -1, + idAttr := "user-menu-item-2", + "Sign out" + ) + ) + ) + ) + ), + div( + cls := "-mr-2 flex md:hidden", + // + button( + tpe := "button", + cls := "bg-indigo-600 inline-flex items-center justify-center p-2 rounded-md text-indigo-200 hover:text-white hover:bg-indigo-500 hover:bg-opacity-75 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-indigo-600 focus:ring-white", + aria.controls := "mobile-menu", + aria.expanded := false, + span(cls := "sr-only", "Open main menu"), + Icons.outline.menu, + Icons.outline.x + ) + ) + ) + ), + + // + div( + cls := "md:hidden", + idAttr := "mobile-menu", + div( + cls := "px-2 pt-2 pb-3 space-y-1 sm:px-3", + // + a( + href := "#", + cls := "bg-indigo-700 text-white block px-3 py-2 rounded-md text-base font-medium", + ariaCurrent := "page", + "Dashboard" + ), + a( + href := "#", + cls := "text-white hover:bg-indigo-500 hover:bg-opacity-75 block px-3 py-2 rounded-md text-base font-medium", + "Team" + ), + a( + href := "#", + cls := "text-white hover:bg-indigo-500 hover:bg-opacity-75 block px-3 py-2 rounded-md text-base font-medium", + "Projects" + ), + a( + href := "#", + cls := "text-white hover:bg-indigo-500 hover:bg-opacity-75 block px-3 py-2 rounded-md text-base font-medium", + "Calendar" + ), + a( + href := "#", + cls := "text-white hover:bg-indigo-500 hover:bg-opacity-75 block px-3 py-2 rounded-md text-base font-medium", + "Reports" + ) + ), + div( + cls := "pt-4 pb-3 border-t border-indigo-700", + div( + cls := "flex items-center px-5", + div( + cls := "flex-shrink-0", + img( + cls := "h-10 w-10 rounded-full", + src := "https://images.unsplash.com/photo-1472099645785-5658abf4ff4e?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=facearea&facepad=2&w=256&h=256&q=80", + alt := "" + ) + ), + div( + cls := "ml-3", + div(cls := "text-base font-medium text-white", "Tom Cook"), + div( + cls := "text-sm font-medium text-indigo-300", + "tom@example.com" + ) + ), + button( + tpe := "button", + cls := "ml-auto bg-indigo-600 flex-shrink-0 p-1 rounded-full text-indigo-200 hover:text-white focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-indigo-600 focus:ring-white", + span(cls := "sr-only", "View notifications"), + Icons.outline.bell + ) + ), + div( + cls := "mt-3 px-2 space-y-1", + a( + href := "#", + cls := "block px-3 py-2 rounded-md text-base font-medium text-white hover:bg-indigo-500 hover:bg-opacity-75", + "Your Profile" + ), + a( + href := "#", + cls := "block px-3 py-2 rounded-md text-base font-medium text-white hover:bg-indigo-500 hover:bg-opacity-75", + "Settings" + ), + a( + href := "#", + cls := "block px-3 py-2 rounded-md text-base font-medium text-white hover:bg-indigo-500 hover:bg-opacity-75", + "Sign out" + ) + ) + ) + ) + ), + header( + cls := "bg-white shadow-sm", + div( + cls := "max-w-7xl mx-auto py-4 px-4 sm:px-6 lg:px-8", + h1( + cls := "text-lg leading-6 font-semibold text-gray-900", + "Dashboard" + ) + ) + ), + main( + div( + cls := "max-w-7xl mx-auto py-6 sm:px-6 lg:px-8", + // + div( + cls := "px-4 py-4 sm:px-0", + div( + cls := "border-4 border-dashed border-gray-200 rounded-lg h-96", + content + ) + ) + // + ) + ) + ) +} diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/Main.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/Main.scala new file mode 100644 index 0000000..247d211 --- /dev/null +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/Main.scala @@ -0,0 +1,32 @@ +package cz.e_bs.cmi.mdr.pdb.app + +import scala.scalajs.js.annotation.JSExportTopLevel +import scala.scalajs.js.annotation.JSExport +import scala.scalajs.js.annotation.JSImport +import scala.scalajs.js +import org.scalajs.dom +import com.raquo.laminar.api.L.{*, given} +import scala.scalajs.js.Date + +@js.native +@JSImport("stylesheets/main.css", JSImport.Namespace) +object Css extends js.Any + +@JSExportTopLevel("app") +object Main { + + // Pull in the stylesheet + val css: Css.type = Css + + @JSExport + def main(args: Array[String]): Unit = { + val appContainer = dom.document.querySelector("#app") + val $time = EventStream.periodic(1000).mapTo(new Date().toTimeString) + val appElement: Div = div( + h1("Hello"), + "Current time is: ", + b(child.text <-- $time) + ) + val root: RootNode = render(appContainer, Layout.layout(appElement)) + } +} diff --git a/app/src/main/static/stylesheets/main.css b/app/src/main/static/stylesheets/main.css new file mode 100644 index 0000000..76fcadc --- /dev/null +++ b/app/src/main/static/stylesheets/main.css @@ -0,0 +1,3 @@ +@import "tailwindcss/base"; +@import "tailwindcss/components"; +@import "tailwindcss/utilities"; diff --git a/app/index.html b/app/index.html index c3d4ca4..b921e14 100644 --- a/app/index.html +++ b/app/index.html @@ -1,18 +1,13 @@ - + Posuzování shody dle MDR - - +
<%- script %> diff --git a/app/package.json b/app/package.json index 283a637..1f98d8f 100644 --- a/app/package.json +++ b/app/package.json @@ -1,19 +1,19 @@ { "private": true, "devDependencies": { - "@tailwindcss/forms": "^0.3.4", - "@tailwindcss/typography": "^0.4.1", - "postcss": "^8.3.11", + "@tailwindcss/forms": "^0.4.0", + "@tailwindcss/typography": "^0.5.1", + "autoprefixer": "^10.4.2", + "postcss": "^8.4.6", "postcss-import": "^14.0.2", "postcss-preset-env": "^7.0.1", "stylelint": "^14.1.0", "stylelint-config-recommended": "^6.0.0", "stylelint-config-standard": "^24.0.0", - "tailwindcss": "^2.2.19", - "autoprefixer": "^10.0.2", - "vite": "^2.6.14", - "vite-plugin-html": "^2.1.0", - "typescript": "4.2.4" + "tailwindcss": "^3.0.18", + "typescript": "4.2.4", + "vite": "^2.7.13", + "vite-plugin-html": "^3.0.3" }, "browserslist": [ "defaults" @@ -23,6 +23,5 @@ "build": "vite build", "serve": "vite preview" }, - "dependencies": { - } + "dependencies": {} } diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/Main.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/Main.scala deleted file mode 100644 index 017d6cb..0000000 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/Main.scala +++ /dev/null @@ -1,21 +0,0 @@ -package cz.e_bs.cmi.mdr.pdb - -import scala.scalajs.js.annotation.JSExportTopLevel -import scala.scalajs.js.annotation.JSExport -import org.scalajs.dom -import com.raquo.laminar.api.L.{*, given} - -@JSExportTopLevel("app") -object Main { - - @JSExport - def main(args: Array[String]): Unit = { - val appContainer = dom.document.querySelector("#app") - val appElement: Div = div( - h1("Hello"), - "Current time is:", - b("12:00") - ) - val root: RootNode = render(appContainer, appElement) - } -} diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/Icons.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/Icons.scala new file mode 100644 index 0000000..b448dc6 --- /dev/null +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/Icons.scala @@ -0,0 +1,62 @@ +package cz.e_bs.cmi.mdr.pdb.app + +import com.raquo.laminar.api.L.svg.{*, given} +import com.raquo.domtypes.generic.defs.attrs.AriaAttrs +import com.raquo.laminar.keys.ReactiveSvgAttr +import com.raquo.laminar.builders.SvgBuilders +import com.raquo.domtypes.generic.codecs.BooleanAsTrueFalseStringCodec + +object Icons { + object aria { + val hidden = customSvgAttr("aria-hidden", BooleanAsTrueFalseStringCodec) + } + + object outline { + val bell = + // + svg( + cls := "h-6 w-6", + xmlns := "http://www.w3.org/2000/svg", + fill := "none", + viewBox := "0 0 24 24", + stroke := "currentColor", + aria.hidden := true, + path( + strokeLineCap := "round", + strokeLineJoin := "round", + strokeWidth := "2", + d := "M15 17h5l-1.405-1.405A2.032 2.032 0 0118 14.158V11a6.002 6.002 0 00-4-5.659V5a2 2 0 10-4 0v.341C7.67 6.165 6 8.388 6 11v3.159c0 .538-.214 1.055-.595 1.436L4 17h5m6 0v1a3 3 0 11-6 0v-1m6 0H9" + ) + ) + + val menu = svg( + cls := "block h-6 w-6", + xmlns := "http://www.w3.org/2000/svg", + fill := "none", + viewBox := "0 0 24 24", + stroke := "currentColor", + aria.hidden := true, + path( + strokeLineCap := "round", + strokeLineJoin := "round", + strokeWidth := "2", + d := "M4 6h16M4 12h16M4 18h16" + ) + ) + val x = + svg( + cls := "hidden h-6 w-6", + xmlns := "http://www.w3.org/2000/svg", + fill := "none", + viewBox := "0 0 24 24", + stroke := "currentColor", + aria.hidden := true, + path( + strokeLineCap := "round", + strokeLineJoin := "round", + strokeWidth := "2", + d := "M6 18L18 6M6 6l12 12" + ) + ) + } +} diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/Layout.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/Layout.scala new file mode 100644 index 0000000..a801746 --- /dev/null +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/Layout.scala @@ -0,0 +1,259 @@ +package cz.e_bs.cmi.mdr.pdb.app + +import com.raquo.laminar.api.L.{*, given} +import com.raquo.domtypes.generic.codecs.StringAsIsCodec + +object Layout { + val ariaCurrent = customProp("aria-current", StringAsIsCodec) + + def layout(content: HtmlElement): HtmlElement = + div( + cls := "min-h-full", + nav( + cls := "bg-indigo-600", + div( + cls := "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8", + div( + cls := "flex items-center justify-between h-16", + div( + cls := "flex items-center", + div( + cls := "flex-shrink-0", + img( + cls := "h-8 w-8", + src := "https://tailwindui.com/img/logos/workflow-mark-indigo-300.svg", + alt := "Workflow" + ) + ), + div( + cls := "hidden md:block", + div( + cls := "ml-10 flex items-baseline space-x-4", + // + a( + href := "#", + cls := "bg-indigo-700 text-white px-3 py-2 rounded-md text-sm font-medium", + ariaCurrent := "page", + "Dashboard" + ), + a( + href := "#", + cls := "text-white hover:bg-indigo-500 hover:bg-opacity-75 px-3 py-2 rounded-md text-sm font-medium", + "Team" + ), + a( + href := "#", + cls := "text-white hover:bg-indigo-500 hover:bg-opacity-75 px-3 py-2 rounded-md text-sm font-medium", + "Projects" + ), + a( + href := "#", + cls := "text-white hover:bg-indigo-500 hover:bg-opacity-75 px-3 py-2 rounded-md text-sm font-medium", + "Calendar" + ), + a( + href := "#", + cls := "text-white hover:bg-indigo-500 hover:bg-opacity-75 px-3 py-2 rounded-md text-sm font-medium", + "Reports" + ) + ) + ) + ), + div( + cls := "hidden md:block", + div( + cls := "ml-4 flex items-center md:ml-6", + button( + tpe := "button", + cls := "p-1 bg-indigo-600 rounded-full text-indigo-200 hover:text-white focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-indigo-600 focus:ring-white", + span(cls := "sr-only", "View notifications"), + Icons.outline.bell + ), + + // + div( + cls := "ml-3 relative", + div( + button( + tpe := "button", + cls := "max-w-xs bg-indigo-600 rounded-full flex items-center text-sm focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-indigo-600 focus:ring-white", + idAttr := "user-menu-button", + aria.expanded := false, + aria.hasPopup := true, + span(cls := "sr-only", "Open user menu"), + img( + cls := "h-8 w-8 rounded-full", + src := "https://images.unsplash.com/photo-1472099645785-5658abf4ff4e?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=facearea&facepad=2&w=256&h=256&q=80", + alt := "" + ) + ) + ), + /* + * */ + div( + cls := "origin-top-right absolute right-0 mt-2 w-48 rounded-md shadow-lg py-1 bg-white ring-1 ring-black ring-opacity-5 focus:outline-none", + role := "menu", + aria.orientation := "vertical", + aria.labelledBy := "user-menu-button", + tabIndex := -1, + // + a( + href := "#", + cls := "block px-4 py-2 text-sm text-gray-700", + role := "menuitem", + tabIndex := -1, + idAttr := "user-menu-item-0", + "Your Profile" + ), + a( + href := "#", + cls := "block px-4 py-2 text-sm text-gray-700", + role := "menuitem", + tabIndex := -1, + idAttr := "user-menu-item-1", + "Settings" + ), + a( + href := "#", + cls := "block px-4 py-2 text-sm text-gray-700", + role := "menuitem", + tabIndex := -1, + idAttr := "user-menu-item-2", + "Sign out" + ) + ) + ) + ) + ), + div( + cls := "-mr-2 flex md:hidden", + // + button( + tpe := "button", + cls := "bg-indigo-600 inline-flex items-center justify-center p-2 rounded-md text-indigo-200 hover:text-white hover:bg-indigo-500 hover:bg-opacity-75 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-indigo-600 focus:ring-white", + aria.controls := "mobile-menu", + aria.expanded := false, + span(cls := "sr-only", "Open main menu"), + Icons.outline.menu, + Icons.outline.x + ) + ) + ) + ), + + // + div( + cls := "md:hidden", + idAttr := "mobile-menu", + div( + cls := "px-2 pt-2 pb-3 space-y-1 sm:px-3", + // + a( + href := "#", + cls := "bg-indigo-700 text-white block px-3 py-2 rounded-md text-base font-medium", + ariaCurrent := "page", + "Dashboard" + ), + a( + href := "#", + cls := "text-white hover:bg-indigo-500 hover:bg-opacity-75 block px-3 py-2 rounded-md text-base font-medium", + "Team" + ), + a( + href := "#", + cls := "text-white hover:bg-indigo-500 hover:bg-opacity-75 block px-3 py-2 rounded-md text-base font-medium", + "Projects" + ), + a( + href := "#", + cls := "text-white hover:bg-indigo-500 hover:bg-opacity-75 block px-3 py-2 rounded-md text-base font-medium", + "Calendar" + ), + a( + href := "#", + cls := "text-white hover:bg-indigo-500 hover:bg-opacity-75 block px-3 py-2 rounded-md text-base font-medium", + "Reports" + ) + ), + div( + cls := "pt-4 pb-3 border-t border-indigo-700", + div( + cls := "flex items-center px-5", + div( + cls := "flex-shrink-0", + img( + cls := "h-10 w-10 rounded-full", + src := "https://images.unsplash.com/photo-1472099645785-5658abf4ff4e?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=facearea&facepad=2&w=256&h=256&q=80", + alt := "" + ) + ), + div( + cls := "ml-3", + div(cls := "text-base font-medium text-white", "Tom Cook"), + div( + cls := "text-sm font-medium text-indigo-300", + "tom@example.com" + ) + ), + button( + tpe := "button", + cls := "ml-auto bg-indigo-600 flex-shrink-0 p-1 rounded-full text-indigo-200 hover:text-white focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-indigo-600 focus:ring-white", + span(cls := "sr-only", "View notifications"), + Icons.outline.bell + ) + ), + div( + cls := "mt-3 px-2 space-y-1", + a( + href := "#", + cls := "block px-3 py-2 rounded-md text-base font-medium text-white hover:bg-indigo-500 hover:bg-opacity-75", + "Your Profile" + ), + a( + href := "#", + cls := "block px-3 py-2 rounded-md text-base font-medium text-white hover:bg-indigo-500 hover:bg-opacity-75", + "Settings" + ), + a( + href := "#", + cls := "block px-3 py-2 rounded-md text-base font-medium text-white hover:bg-indigo-500 hover:bg-opacity-75", + "Sign out" + ) + ) + ) + ) + ), + header( + cls := "bg-white shadow-sm", + div( + cls := "max-w-7xl mx-auto py-4 px-4 sm:px-6 lg:px-8", + h1( + cls := "text-lg leading-6 font-semibold text-gray-900", + "Dashboard" + ) + ) + ), + main( + div( + cls := "max-w-7xl mx-auto py-6 sm:px-6 lg:px-8", + // + div( + cls := "px-4 py-4 sm:px-0", + div( + cls := "border-4 border-dashed border-gray-200 rounded-lg h-96", + content + ) + ) + // + ) + ) + ) +} diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/Main.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/Main.scala new file mode 100644 index 0000000..247d211 --- /dev/null +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/Main.scala @@ -0,0 +1,32 @@ +package cz.e_bs.cmi.mdr.pdb.app + +import scala.scalajs.js.annotation.JSExportTopLevel +import scala.scalajs.js.annotation.JSExport +import scala.scalajs.js.annotation.JSImport +import scala.scalajs.js +import org.scalajs.dom +import com.raquo.laminar.api.L.{*, given} +import scala.scalajs.js.Date + +@js.native +@JSImport("stylesheets/main.css", JSImport.Namespace) +object Css extends js.Any + +@JSExportTopLevel("app") +object Main { + + // Pull in the stylesheet + val css: Css.type = Css + + @JSExport + def main(args: Array[String]): Unit = { + val appContainer = dom.document.querySelector("#app") + val $time = EventStream.periodic(1000).mapTo(new Date().toTimeString) + val appElement: Div = div( + h1("Hello"), + "Current time is: ", + b(child.text <-- $time) + ) + val root: RootNode = render(appContainer, Layout.layout(appElement)) + } +} diff --git a/app/src/main/static/stylesheets/main.css b/app/src/main/static/stylesheets/main.css new file mode 100644 index 0000000..76fcadc --- /dev/null +++ b/app/src/main/static/stylesheets/main.css @@ -0,0 +1,3 @@ +@import "tailwindcss/base"; +@import "tailwindcss/components"; +@import "tailwindcss/utilities"; diff --git a/app/tailwind.config.js b/app/tailwind.config.js index 3159b69..39108af 100644 --- a/app/tailwind.config.js +++ b/app/tailwind.config.js @@ -6,7 +6,7 @@ module.exports = { mode: 'jit', - purge: [ + content: [ path.resolve(__dirname, `./${appInfo.bundlePath(process.env.NODE_ENV)}/*.js`), path.resolve(__dirname, './*.html'), ], @@ -16,7 +16,7 @@ serif: ['Inter', 'ui-serif', 'Georgia', 'Cambria', '"Times New Roman"', 'Times', 'serif'], }, colors: { - gray: colors.coolGray, + gray: colors.gray, }, }, }, diff --git a/app/index.html b/app/index.html index c3d4ca4..b921e14 100644 --- a/app/index.html +++ b/app/index.html @@ -1,18 +1,13 @@ - + Posuzování shody dle MDR - - +
<%- script %> diff --git a/app/package.json b/app/package.json index 283a637..1f98d8f 100644 --- a/app/package.json +++ b/app/package.json @@ -1,19 +1,19 @@ { "private": true, "devDependencies": { - "@tailwindcss/forms": "^0.3.4", - "@tailwindcss/typography": "^0.4.1", - "postcss": "^8.3.11", + "@tailwindcss/forms": "^0.4.0", + "@tailwindcss/typography": "^0.5.1", + "autoprefixer": "^10.4.2", + "postcss": "^8.4.6", "postcss-import": "^14.0.2", "postcss-preset-env": "^7.0.1", "stylelint": "^14.1.0", "stylelint-config-recommended": "^6.0.0", "stylelint-config-standard": "^24.0.0", - "tailwindcss": "^2.2.19", - "autoprefixer": "^10.0.2", - "vite": "^2.6.14", - "vite-plugin-html": "^2.1.0", - "typescript": "4.2.4" + "tailwindcss": "^3.0.18", + "typescript": "4.2.4", + "vite": "^2.7.13", + "vite-plugin-html": "^3.0.3" }, "browserslist": [ "defaults" @@ -23,6 +23,5 @@ "build": "vite build", "serve": "vite preview" }, - "dependencies": { - } + "dependencies": {} } diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/Main.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/Main.scala deleted file mode 100644 index 017d6cb..0000000 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/Main.scala +++ /dev/null @@ -1,21 +0,0 @@ -package cz.e_bs.cmi.mdr.pdb - -import scala.scalajs.js.annotation.JSExportTopLevel -import scala.scalajs.js.annotation.JSExport -import org.scalajs.dom -import com.raquo.laminar.api.L.{*, given} - -@JSExportTopLevel("app") -object Main { - - @JSExport - def main(args: Array[String]): Unit = { - val appContainer = dom.document.querySelector("#app") - val appElement: Div = div( - h1("Hello"), - "Current time is:", - b("12:00") - ) - val root: RootNode = render(appContainer, appElement) - } -} diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/Icons.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/Icons.scala new file mode 100644 index 0000000..b448dc6 --- /dev/null +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/Icons.scala @@ -0,0 +1,62 @@ +package cz.e_bs.cmi.mdr.pdb.app + +import com.raquo.laminar.api.L.svg.{*, given} +import com.raquo.domtypes.generic.defs.attrs.AriaAttrs +import com.raquo.laminar.keys.ReactiveSvgAttr +import com.raquo.laminar.builders.SvgBuilders +import com.raquo.domtypes.generic.codecs.BooleanAsTrueFalseStringCodec + +object Icons { + object aria { + val hidden = customSvgAttr("aria-hidden", BooleanAsTrueFalseStringCodec) + } + + object outline { + val bell = + // + svg( + cls := "h-6 w-6", + xmlns := "http://www.w3.org/2000/svg", + fill := "none", + viewBox := "0 0 24 24", + stroke := "currentColor", + aria.hidden := true, + path( + strokeLineCap := "round", + strokeLineJoin := "round", + strokeWidth := "2", + d := "M15 17h5l-1.405-1.405A2.032 2.032 0 0118 14.158V11a6.002 6.002 0 00-4-5.659V5a2 2 0 10-4 0v.341C7.67 6.165 6 8.388 6 11v3.159c0 .538-.214 1.055-.595 1.436L4 17h5m6 0v1a3 3 0 11-6 0v-1m6 0H9" + ) + ) + + val menu = svg( + cls := "block h-6 w-6", + xmlns := "http://www.w3.org/2000/svg", + fill := "none", + viewBox := "0 0 24 24", + stroke := "currentColor", + aria.hidden := true, + path( + strokeLineCap := "round", + strokeLineJoin := "round", + strokeWidth := "2", + d := "M4 6h16M4 12h16M4 18h16" + ) + ) + val x = + svg( + cls := "hidden h-6 w-6", + xmlns := "http://www.w3.org/2000/svg", + fill := "none", + viewBox := "0 0 24 24", + stroke := "currentColor", + aria.hidden := true, + path( + strokeLineCap := "round", + strokeLineJoin := "round", + strokeWidth := "2", + d := "M6 18L18 6M6 6l12 12" + ) + ) + } +} diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/Layout.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/Layout.scala new file mode 100644 index 0000000..a801746 --- /dev/null +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/Layout.scala @@ -0,0 +1,259 @@ +package cz.e_bs.cmi.mdr.pdb.app + +import com.raquo.laminar.api.L.{*, given} +import com.raquo.domtypes.generic.codecs.StringAsIsCodec + +object Layout { + val ariaCurrent = customProp("aria-current", StringAsIsCodec) + + def layout(content: HtmlElement): HtmlElement = + div( + cls := "min-h-full", + nav( + cls := "bg-indigo-600", + div( + cls := "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8", + div( + cls := "flex items-center justify-between h-16", + div( + cls := "flex items-center", + div( + cls := "flex-shrink-0", + img( + cls := "h-8 w-8", + src := "https://tailwindui.com/img/logos/workflow-mark-indigo-300.svg", + alt := "Workflow" + ) + ), + div( + cls := "hidden md:block", + div( + cls := "ml-10 flex items-baseline space-x-4", + // + a( + href := "#", + cls := "bg-indigo-700 text-white px-3 py-2 rounded-md text-sm font-medium", + ariaCurrent := "page", + "Dashboard" + ), + a( + href := "#", + cls := "text-white hover:bg-indigo-500 hover:bg-opacity-75 px-3 py-2 rounded-md text-sm font-medium", + "Team" + ), + a( + href := "#", + cls := "text-white hover:bg-indigo-500 hover:bg-opacity-75 px-3 py-2 rounded-md text-sm font-medium", + "Projects" + ), + a( + href := "#", + cls := "text-white hover:bg-indigo-500 hover:bg-opacity-75 px-3 py-2 rounded-md text-sm font-medium", + "Calendar" + ), + a( + href := "#", + cls := "text-white hover:bg-indigo-500 hover:bg-opacity-75 px-3 py-2 rounded-md text-sm font-medium", + "Reports" + ) + ) + ) + ), + div( + cls := "hidden md:block", + div( + cls := "ml-4 flex items-center md:ml-6", + button( + tpe := "button", + cls := "p-1 bg-indigo-600 rounded-full text-indigo-200 hover:text-white focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-indigo-600 focus:ring-white", + span(cls := "sr-only", "View notifications"), + Icons.outline.bell + ), + + // + div( + cls := "ml-3 relative", + div( + button( + tpe := "button", + cls := "max-w-xs bg-indigo-600 rounded-full flex items-center text-sm focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-indigo-600 focus:ring-white", + idAttr := "user-menu-button", + aria.expanded := false, + aria.hasPopup := true, + span(cls := "sr-only", "Open user menu"), + img( + cls := "h-8 w-8 rounded-full", + src := "https://images.unsplash.com/photo-1472099645785-5658abf4ff4e?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=facearea&facepad=2&w=256&h=256&q=80", + alt := "" + ) + ) + ), + /* + * */ + div( + cls := "origin-top-right absolute right-0 mt-2 w-48 rounded-md shadow-lg py-1 bg-white ring-1 ring-black ring-opacity-5 focus:outline-none", + role := "menu", + aria.orientation := "vertical", + aria.labelledBy := "user-menu-button", + tabIndex := -1, + // + a( + href := "#", + cls := "block px-4 py-2 text-sm text-gray-700", + role := "menuitem", + tabIndex := -1, + idAttr := "user-menu-item-0", + "Your Profile" + ), + a( + href := "#", + cls := "block px-4 py-2 text-sm text-gray-700", + role := "menuitem", + tabIndex := -1, + idAttr := "user-menu-item-1", + "Settings" + ), + a( + href := "#", + cls := "block px-4 py-2 text-sm text-gray-700", + role := "menuitem", + tabIndex := -1, + idAttr := "user-menu-item-2", + "Sign out" + ) + ) + ) + ) + ), + div( + cls := "-mr-2 flex md:hidden", + // + button( + tpe := "button", + cls := "bg-indigo-600 inline-flex items-center justify-center p-2 rounded-md text-indigo-200 hover:text-white hover:bg-indigo-500 hover:bg-opacity-75 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-indigo-600 focus:ring-white", + aria.controls := "mobile-menu", + aria.expanded := false, + span(cls := "sr-only", "Open main menu"), + Icons.outline.menu, + Icons.outline.x + ) + ) + ) + ), + + // + div( + cls := "md:hidden", + idAttr := "mobile-menu", + div( + cls := "px-2 pt-2 pb-3 space-y-1 sm:px-3", + // + a( + href := "#", + cls := "bg-indigo-700 text-white block px-3 py-2 rounded-md text-base font-medium", + ariaCurrent := "page", + "Dashboard" + ), + a( + href := "#", + cls := "text-white hover:bg-indigo-500 hover:bg-opacity-75 block px-3 py-2 rounded-md text-base font-medium", + "Team" + ), + a( + href := "#", + cls := "text-white hover:bg-indigo-500 hover:bg-opacity-75 block px-3 py-2 rounded-md text-base font-medium", + "Projects" + ), + a( + href := "#", + cls := "text-white hover:bg-indigo-500 hover:bg-opacity-75 block px-3 py-2 rounded-md text-base font-medium", + "Calendar" + ), + a( + href := "#", + cls := "text-white hover:bg-indigo-500 hover:bg-opacity-75 block px-3 py-2 rounded-md text-base font-medium", + "Reports" + ) + ), + div( + cls := "pt-4 pb-3 border-t border-indigo-700", + div( + cls := "flex items-center px-5", + div( + cls := "flex-shrink-0", + img( + cls := "h-10 w-10 rounded-full", + src := "https://images.unsplash.com/photo-1472099645785-5658abf4ff4e?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=facearea&facepad=2&w=256&h=256&q=80", + alt := "" + ) + ), + div( + cls := "ml-3", + div(cls := "text-base font-medium text-white", "Tom Cook"), + div( + cls := "text-sm font-medium text-indigo-300", + "tom@example.com" + ) + ), + button( + tpe := "button", + cls := "ml-auto bg-indigo-600 flex-shrink-0 p-1 rounded-full text-indigo-200 hover:text-white focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-indigo-600 focus:ring-white", + span(cls := "sr-only", "View notifications"), + Icons.outline.bell + ) + ), + div( + cls := "mt-3 px-2 space-y-1", + a( + href := "#", + cls := "block px-3 py-2 rounded-md text-base font-medium text-white hover:bg-indigo-500 hover:bg-opacity-75", + "Your Profile" + ), + a( + href := "#", + cls := "block px-3 py-2 rounded-md text-base font-medium text-white hover:bg-indigo-500 hover:bg-opacity-75", + "Settings" + ), + a( + href := "#", + cls := "block px-3 py-2 rounded-md text-base font-medium text-white hover:bg-indigo-500 hover:bg-opacity-75", + "Sign out" + ) + ) + ) + ) + ), + header( + cls := "bg-white shadow-sm", + div( + cls := "max-w-7xl mx-auto py-4 px-4 sm:px-6 lg:px-8", + h1( + cls := "text-lg leading-6 font-semibold text-gray-900", + "Dashboard" + ) + ) + ), + main( + div( + cls := "max-w-7xl mx-auto py-6 sm:px-6 lg:px-8", + // + div( + cls := "px-4 py-4 sm:px-0", + div( + cls := "border-4 border-dashed border-gray-200 rounded-lg h-96", + content + ) + ) + // + ) + ) + ) +} diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/Main.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/Main.scala new file mode 100644 index 0000000..247d211 --- /dev/null +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/Main.scala @@ -0,0 +1,32 @@ +package cz.e_bs.cmi.mdr.pdb.app + +import scala.scalajs.js.annotation.JSExportTopLevel +import scala.scalajs.js.annotation.JSExport +import scala.scalajs.js.annotation.JSImport +import scala.scalajs.js +import org.scalajs.dom +import com.raquo.laminar.api.L.{*, given} +import scala.scalajs.js.Date + +@js.native +@JSImport("stylesheets/main.css", JSImport.Namespace) +object Css extends js.Any + +@JSExportTopLevel("app") +object Main { + + // Pull in the stylesheet + val css: Css.type = Css + + @JSExport + def main(args: Array[String]): Unit = { + val appContainer = dom.document.querySelector("#app") + val $time = EventStream.periodic(1000).mapTo(new Date().toTimeString) + val appElement: Div = div( + h1("Hello"), + "Current time is: ", + b(child.text <-- $time) + ) + val root: RootNode = render(appContainer, Layout.layout(appElement)) + } +} diff --git a/app/src/main/static/stylesheets/main.css b/app/src/main/static/stylesheets/main.css new file mode 100644 index 0000000..76fcadc --- /dev/null +++ b/app/src/main/static/stylesheets/main.css @@ -0,0 +1,3 @@ +@import "tailwindcss/base"; +@import "tailwindcss/components"; +@import "tailwindcss/utilities"; diff --git a/app/tailwind.config.js b/app/tailwind.config.js index 3159b69..39108af 100644 --- a/app/tailwind.config.js +++ b/app/tailwind.config.js @@ -6,7 +6,7 @@ module.exports = { mode: 'jit', - purge: [ + content: [ path.resolve(__dirname, `./${appInfo.bundlePath(process.env.NODE_ENV)}/*.js`), path.resolve(__dirname, './*.html'), ], @@ -16,7 +16,7 @@ serif: ['Inter', 'ui-serif', 'Georgia', 'Cambria', '"Times New Roman"', 'Times', 'serif'], }, colors: { - gray: colors.coolGray, + gray: colors.gray, }, }, }, diff --git a/app/vite.config.js b/app/vite.config.js index 78ea958..27b4956 100644 --- a/app/vite.config.js +++ b/app/vite.config.js @@ -1,5 +1,5 @@ import path from 'path' -import {minifyHtml, injectHtml} from 'vite-plugin-html' +import { createHtmlPlugin } from 'vite-plugin-html' import appInfo from './app-info.js' //const moduleUrl = new URL(import.meta.url) @@ -14,12 +14,12 @@ return { publicDir: './src/main/static/public', plugins: [ - ...(process.env.NODE_ENV === 'production' ? [ - minifyHtml(), - ] : []), - injectHtml({ - injectData: { - script + createHtmlPlugin({ + minify: process.env.NODE_ENV === 'production', + inject: { + data: { + script + } } }) ], diff --git a/app/index.html b/app/index.html index c3d4ca4..b921e14 100644 --- a/app/index.html +++ b/app/index.html @@ -1,18 +1,13 @@ - + Posuzování shody dle MDR - - +
<%- script %> diff --git a/app/package.json b/app/package.json index 283a637..1f98d8f 100644 --- a/app/package.json +++ b/app/package.json @@ -1,19 +1,19 @@ { "private": true, "devDependencies": { - "@tailwindcss/forms": "^0.3.4", - "@tailwindcss/typography": "^0.4.1", - "postcss": "^8.3.11", + "@tailwindcss/forms": "^0.4.0", + "@tailwindcss/typography": "^0.5.1", + "autoprefixer": "^10.4.2", + "postcss": "^8.4.6", "postcss-import": "^14.0.2", "postcss-preset-env": "^7.0.1", "stylelint": "^14.1.0", "stylelint-config-recommended": "^6.0.0", "stylelint-config-standard": "^24.0.0", - "tailwindcss": "^2.2.19", - "autoprefixer": "^10.0.2", - "vite": "^2.6.14", - "vite-plugin-html": "^2.1.0", - "typescript": "4.2.4" + "tailwindcss": "^3.0.18", + "typescript": "4.2.4", + "vite": "^2.7.13", + "vite-plugin-html": "^3.0.3" }, "browserslist": [ "defaults" @@ -23,6 +23,5 @@ "build": "vite build", "serve": "vite preview" }, - "dependencies": { - } + "dependencies": {} } diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/Main.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/Main.scala deleted file mode 100644 index 017d6cb..0000000 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/Main.scala +++ /dev/null @@ -1,21 +0,0 @@ -package cz.e_bs.cmi.mdr.pdb - -import scala.scalajs.js.annotation.JSExportTopLevel -import scala.scalajs.js.annotation.JSExport -import org.scalajs.dom -import com.raquo.laminar.api.L.{*, given} - -@JSExportTopLevel("app") -object Main { - - @JSExport - def main(args: Array[String]): Unit = { - val appContainer = dom.document.querySelector("#app") - val appElement: Div = div( - h1("Hello"), - "Current time is:", - b("12:00") - ) - val root: RootNode = render(appContainer, appElement) - } -} diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/Icons.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/Icons.scala new file mode 100644 index 0000000..b448dc6 --- /dev/null +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/Icons.scala @@ -0,0 +1,62 @@ +package cz.e_bs.cmi.mdr.pdb.app + +import com.raquo.laminar.api.L.svg.{*, given} +import com.raquo.domtypes.generic.defs.attrs.AriaAttrs +import com.raquo.laminar.keys.ReactiveSvgAttr +import com.raquo.laminar.builders.SvgBuilders +import com.raquo.domtypes.generic.codecs.BooleanAsTrueFalseStringCodec + +object Icons { + object aria { + val hidden = customSvgAttr("aria-hidden", BooleanAsTrueFalseStringCodec) + } + + object outline { + val bell = + // + svg( + cls := "h-6 w-6", + xmlns := "http://www.w3.org/2000/svg", + fill := "none", + viewBox := "0 0 24 24", + stroke := "currentColor", + aria.hidden := true, + path( + strokeLineCap := "round", + strokeLineJoin := "round", + strokeWidth := "2", + d := "M15 17h5l-1.405-1.405A2.032 2.032 0 0118 14.158V11a6.002 6.002 0 00-4-5.659V5a2 2 0 10-4 0v.341C7.67 6.165 6 8.388 6 11v3.159c0 .538-.214 1.055-.595 1.436L4 17h5m6 0v1a3 3 0 11-6 0v-1m6 0H9" + ) + ) + + val menu = svg( + cls := "block h-6 w-6", + xmlns := "http://www.w3.org/2000/svg", + fill := "none", + viewBox := "0 0 24 24", + stroke := "currentColor", + aria.hidden := true, + path( + strokeLineCap := "round", + strokeLineJoin := "round", + strokeWidth := "2", + d := "M4 6h16M4 12h16M4 18h16" + ) + ) + val x = + svg( + cls := "hidden h-6 w-6", + xmlns := "http://www.w3.org/2000/svg", + fill := "none", + viewBox := "0 0 24 24", + stroke := "currentColor", + aria.hidden := true, + path( + strokeLineCap := "round", + strokeLineJoin := "round", + strokeWidth := "2", + d := "M6 18L18 6M6 6l12 12" + ) + ) + } +} diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/Layout.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/Layout.scala new file mode 100644 index 0000000..a801746 --- /dev/null +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/Layout.scala @@ -0,0 +1,259 @@ +package cz.e_bs.cmi.mdr.pdb.app + +import com.raquo.laminar.api.L.{*, given} +import com.raquo.domtypes.generic.codecs.StringAsIsCodec + +object Layout { + val ariaCurrent = customProp("aria-current", StringAsIsCodec) + + def layout(content: HtmlElement): HtmlElement = + div( + cls := "min-h-full", + nav( + cls := "bg-indigo-600", + div( + cls := "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8", + div( + cls := "flex items-center justify-between h-16", + div( + cls := "flex items-center", + div( + cls := "flex-shrink-0", + img( + cls := "h-8 w-8", + src := "https://tailwindui.com/img/logos/workflow-mark-indigo-300.svg", + alt := "Workflow" + ) + ), + div( + cls := "hidden md:block", + div( + cls := "ml-10 flex items-baseline space-x-4", + // + a( + href := "#", + cls := "bg-indigo-700 text-white px-3 py-2 rounded-md text-sm font-medium", + ariaCurrent := "page", + "Dashboard" + ), + a( + href := "#", + cls := "text-white hover:bg-indigo-500 hover:bg-opacity-75 px-3 py-2 rounded-md text-sm font-medium", + "Team" + ), + a( + href := "#", + cls := "text-white hover:bg-indigo-500 hover:bg-opacity-75 px-3 py-2 rounded-md text-sm font-medium", + "Projects" + ), + a( + href := "#", + cls := "text-white hover:bg-indigo-500 hover:bg-opacity-75 px-3 py-2 rounded-md text-sm font-medium", + "Calendar" + ), + a( + href := "#", + cls := "text-white hover:bg-indigo-500 hover:bg-opacity-75 px-3 py-2 rounded-md text-sm font-medium", + "Reports" + ) + ) + ) + ), + div( + cls := "hidden md:block", + div( + cls := "ml-4 flex items-center md:ml-6", + button( + tpe := "button", + cls := "p-1 bg-indigo-600 rounded-full text-indigo-200 hover:text-white focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-indigo-600 focus:ring-white", + span(cls := "sr-only", "View notifications"), + Icons.outline.bell + ), + + // + div( + cls := "ml-3 relative", + div( + button( + tpe := "button", + cls := "max-w-xs bg-indigo-600 rounded-full flex items-center text-sm focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-indigo-600 focus:ring-white", + idAttr := "user-menu-button", + aria.expanded := false, + aria.hasPopup := true, + span(cls := "sr-only", "Open user menu"), + img( + cls := "h-8 w-8 rounded-full", + src := "https://images.unsplash.com/photo-1472099645785-5658abf4ff4e?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=facearea&facepad=2&w=256&h=256&q=80", + alt := "" + ) + ) + ), + /* + * */ + div( + cls := "origin-top-right absolute right-0 mt-2 w-48 rounded-md shadow-lg py-1 bg-white ring-1 ring-black ring-opacity-5 focus:outline-none", + role := "menu", + aria.orientation := "vertical", + aria.labelledBy := "user-menu-button", + tabIndex := -1, + // + a( + href := "#", + cls := "block px-4 py-2 text-sm text-gray-700", + role := "menuitem", + tabIndex := -1, + idAttr := "user-menu-item-0", + "Your Profile" + ), + a( + href := "#", + cls := "block px-4 py-2 text-sm text-gray-700", + role := "menuitem", + tabIndex := -1, + idAttr := "user-menu-item-1", + "Settings" + ), + a( + href := "#", + cls := "block px-4 py-2 text-sm text-gray-700", + role := "menuitem", + tabIndex := -1, + idAttr := "user-menu-item-2", + "Sign out" + ) + ) + ) + ) + ), + div( + cls := "-mr-2 flex md:hidden", + // + button( + tpe := "button", + cls := "bg-indigo-600 inline-flex items-center justify-center p-2 rounded-md text-indigo-200 hover:text-white hover:bg-indigo-500 hover:bg-opacity-75 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-indigo-600 focus:ring-white", + aria.controls := "mobile-menu", + aria.expanded := false, + span(cls := "sr-only", "Open main menu"), + Icons.outline.menu, + Icons.outline.x + ) + ) + ) + ), + + // + div( + cls := "md:hidden", + idAttr := "mobile-menu", + div( + cls := "px-2 pt-2 pb-3 space-y-1 sm:px-3", + // + a( + href := "#", + cls := "bg-indigo-700 text-white block px-3 py-2 rounded-md text-base font-medium", + ariaCurrent := "page", + "Dashboard" + ), + a( + href := "#", + cls := "text-white hover:bg-indigo-500 hover:bg-opacity-75 block px-3 py-2 rounded-md text-base font-medium", + "Team" + ), + a( + href := "#", + cls := "text-white hover:bg-indigo-500 hover:bg-opacity-75 block px-3 py-2 rounded-md text-base font-medium", + "Projects" + ), + a( + href := "#", + cls := "text-white hover:bg-indigo-500 hover:bg-opacity-75 block px-3 py-2 rounded-md text-base font-medium", + "Calendar" + ), + a( + href := "#", + cls := "text-white hover:bg-indigo-500 hover:bg-opacity-75 block px-3 py-2 rounded-md text-base font-medium", + "Reports" + ) + ), + div( + cls := "pt-4 pb-3 border-t border-indigo-700", + div( + cls := "flex items-center px-5", + div( + cls := "flex-shrink-0", + img( + cls := "h-10 w-10 rounded-full", + src := "https://images.unsplash.com/photo-1472099645785-5658abf4ff4e?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=facearea&facepad=2&w=256&h=256&q=80", + alt := "" + ) + ), + div( + cls := "ml-3", + div(cls := "text-base font-medium text-white", "Tom Cook"), + div( + cls := "text-sm font-medium text-indigo-300", + "tom@example.com" + ) + ), + button( + tpe := "button", + cls := "ml-auto bg-indigo-600 flex-shrink-0 p-1 rounded-full text-indigo-200 hover:text-white focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-indigo-600 focus:ring-white", + span(cls := "sr-only", "View notifications"), + Icons.outline.bell + ) + ), + div( + cls := "mt-3 px-2 space-y-1", + a( + href := "#", + cls := "block px-3 py-2 rounded-md text-base font-medium text-white hover:bg-indigo-500 hover:bg-opacity-75", + "Your Profile" + ), + a( + href := "#", + cls := "block px-3 py-2 rounded-md text-base font-medium text-white hover:bg-indigo-500 hover:bg-opacity-75", + "Settings" + ), + a( + href := "#", + cls := "block px-3 py-2 rounded-md text-base font-medium text-white hover:bg-indigo-500 hover:bg-opacity-75", + "Sign out" + ) + ) + ) + ) + ), + header( + cls := "bg-white shadow-sm", + div( + cls := "max-w-7xl mx-auto py-4 px-4 sm:px-6 lg:px-8", + h1( + cls := "text-lg leading-6 font-semibold text-gray-900", + "Dashboard" + ) + ) + ), + main( + div( + cls := "max-w-7xl mx-auto py-6 sm:px-6 lg:px-8", + // + div( + cls := "px-4 py-4 sm:px-0", + div( + cls := "border-4 border-dashed border-gray-200 rounded-lg h-96", + content + ) + ) + // + ) + ) + ) +} diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/Main.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/Main.scala new file mode 100644 index 0000000..247d211 --- /dev/null +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/Main.scala @@ -0,0 +1,32 @@ +package cz.e_bs.cmi.mdr.pdb.app + +import scala.scalajs.js.annotation.JSExportTopLevel +import scala.scalajs.js.annotation.JSExport +import scala.scalajs.js.annotation.JSImport +import scala.scalajs.js +import org.scalajs.dom +import com.raquo.laminar.api.L.{*, given} +import scala.scalajs.js.Date + +@js.native +@JSImport("stylesheets/main.css", JSImport.Namespace) +object Css extends js.Any + +@JSExportTopLevel("app") +object Main { + + // Pull in the stylesheet + val css: Css.type = Css + + @JSExport + def main(args: Array[String]): Unit = { + val appContainer = dom.document.querySelector("#app") + val $time = EventStream.periodic(1000).mapTo(new Date().toTimeString) + val appElement: Div = div( + h1("Hello"), + "Current time is: ", + b(child.text <-- $time) + ) + val root: RootNode = render(appContainer, Layout.layout(appElement)) + } +} diff --git a/app/src/main/static/stylesheets/main.css b/app/src/main/static/stylesheets/main.css new file mode 100644 index 0000000..76fcadc --- /dev/null +++ b/app/src/main/static/stylesheets/main.css @@ -0,0 +1,3 @@ +@import "tailwindcss/base"; +@import "tailwindcss/components"; +@import "tailwindcss/utilities"; diff --git a/app/tailwind.config.js b/app/tailwind.config.js index 3159b69..39108af 100644 --- a/app/tailwind.config.js +++ b/app/tailwind.config.js @@ -6,7 +6,7 @@ module.exports = { mode: 'jit', - purge: [ + content: [ path.resolve(__dirname, `./${appInfo.bundlePath(process.env.NODE_ENV)}/*.js`), path.resolve(__dirname, './*.html'), ], @@ -16,7 +16,7 @@ serif: ['Inter', 'ui-serif', 'Georgia', 'Cambria', '"Times New Roman"', 'Times', 'serif'], }, colors: { - gray: colors.coolGray, + gray: colors.gray, }, }, }, diff --git a/app/vite.config.js b/app/vite.config.js index 78ea958..27b4956 100644 --- a/app/vite.config.js +++ b/app/vite.config.js @@ -1,5 +1,5 @@ import path from 'path' -import {minifyHtml, injectHtml} from 'vite-plugin-html' +import { createHtmlPlugin } from 'vite-plugin-html' import appInfo from './app-info.js' //const moduleUrl = new URL(import.meta.url) @@ -14,12 +14,12 @@ return { publicDir: './src/main/static/public', plugins: [ - ...(process.env.NODE_ENV === 'production' ? [ - minifyHtml(), - ] : []), - injectHtml({ - injectData: { - script + createHtmlPlugin({ + minify: process.env.NODE_ENV === 'production', + inject: { + data: { + script + } } }) ], diff --git a/app/yarn.lock b/app/yarn.lock index 52a7ba7..01e25f5 100644 --- a/app/yarn.lock +++ b/app/yarn.lock @@ -80,22 +80,21 @@ estree-walker "^2.0.1" picomatch "^2.2.2" -"@tailwindcss/forms@^0.3.4": - version "0.3.4" - resolved "https://registry.yarnpkg.com/@tailwindcss/forms/-/forms-0.3.4.tgz#e4939dc16450eccf4fd2029770096f38cbb556d4" - integrity sha512-vlAoBifNJUkagB+PAdW4aHMe4pKmSLroH398UPgIogBFc91D2VlHUxe4pjxQhiJl0Nfw53sHSJSQBSTQBZP3vA== +"@tailwindcss/forms@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@tailwindcss/forms/-/forms-0.4.0.tgz#a46715e347a32d216a3973eb67473bd29ae3798e" + integrity sha512-DeaQBx6EgEeuZPQACvC+mKneJsD8am1uiJugjgQK1+/Vt+Ai0GpFBC2T2fqnUad71WgOxyrZPE6BG1VaI6YqfQ== dependencies: mini-svg-data-uri "^1.2.3" -"@tailwindcss/typography@^0.4.1": - version "0.4.1" - resolved "https://registry.yarnpkg.com/@tailwindcss/typography/-/typography-0.4.1.tgz#51ddbceea6a0ee9902c649dbe58871c81a831212" - integrity sha512-ovPPLUhs7zAIJfr0y1dbGlyCuPhpuv/jpBoFgqAc658DWGGrOBWBMpAWLw2KlzbNeVk4YBJMzue1ekvIbdw6XA== +"@tailwindcss/typography@^0.5.1": + version "0.5.1" + resolved "https://registry.yarnpkg.com/@tailwindcss/typography/-/typography-0.5.1.tgz#486248a9426501f11a9b0295f7cfc0eb29659c46" + integrity sha512-AmSzZSgLhHKlILKduU+PKBTHL6c+al82syZlRid1xgmlWwXagLigO+O++B4C0scpMfzW//f/3YCRcwwEHWoU3w== dependencies: lodash.castarray "^4.4.0" lodash.isplainobject "^4.0.6" lodash.merge "^4.6.2" - lodash.uniq "^4.5.0" "@types/minimist@^1.2.0": version "1.2.2" @@ -193,7 +192,7 @@ resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" integrity sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0= -autoprefixer@^10.0.2, autoprefixer@^10.4.2: +autoprefixer@^10.4.2: version "10.4.2" resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.2.tgz#25e1df09a31a9fba5c40b578936b90d35c9d4d3b" integrity sha512-9fOPpHKuDW1w/0EKfRmVnxTDt8166MAnLI3mgZ1JCnhNtYWxcJ6Ud5CO/AVOZi/AvFa8DY9RTy3h3+tFBlrrdQ== @@ -220,6 +219,11 @@ resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== +boolbase@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -251,11 +255,6 @@ resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== -bytes@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" - integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== - callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" @@ -289,9 +288,9 @@ integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== caniuse-lite@^1.0.30001286, caniuse-lite@^1.0.30001297: - version "1.0.30001304" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001304.tgz#38af55ed3fc8220cb13e35e6e7309c8c65a05559" - integrity sha512-bdsfZd6K6ap87AGqSHJP/s1V+U6Z5lyrcbBu3ovbCCf8cSYpwTtGrCBObMpJqwxfTbLW6YTIdbb1jEeTelcpYQ== + version "1.0.30001305" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001305.tgz#02cd8031df07c4fcb117aa2ecc4899122681bd4c" + integrity sha512-p7d9YQMji8haf0f+5rbcv9WlQ+N5jMPfRAnUmZRlNxsNeBO3Yr7RYG6M2uTY1h9tCVdlkJg6YNNc4kiAiBLdWA== chalk@^2.0.0, chalk@^2.4.2: version "2.4.2" @@ -310,7 +309,7 @@ ansi-styles "^4.1.0" supports-color "^7.1.0" -chokidar@^3.5.2: +chokidar@^3.5.3: version "3.5.3" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== @@ -358,38 +357,27 @@ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= -color-name@^1.0.0, color-name@~1.1.4: +color-name@^1.1.4, color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -color-string@^1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.0.tgz#63b6ebd1bec11999d1df3a79a7569451ac2be8aa" - integrity sha512-9Mrz2AQLefkH1UvASKj6v6hj/7eWgjnT/cVsR8CumieLoT+g900exWeNogqtweI8dxloXN9BDQTYro1oWu/5CQ== - dependencies: - color-name "^1.0.0" - simple-swizzle "^0.2.2" - -color@^4.0.1: - version "4.2.0" - resolved "https://registry.yarnpkg.com/color/-/color-4.2.0.tgz#0c782459a3e98838ea01e4bc0fb43310ca35af78" - integrity sha512-hHTcrbvEnGjC7WBMk6ibQWFVDgEFTVmjrz2Q5HlU6ltwxv0JJN2Z8I7uRbWeQLF04dikxs8zgyZkazRJvSMtyQ== - dependencies: - color-convert "^2.0.1" - color-string "^1.9.0" - colord@^2.9.2: version "2.9.2" resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.2.tgz#25e2bacbbaa65991422c07ea209e2089428effb1" integrity sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ== +colorette@^2.0.16: + version "2.0.16" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.16.tgz#713b9af84fdb000139f04546bd4a93f62a5085da" + integrity sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g== + commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== -commander@^8.0.0, commander@^8.3.0: +commander@^8.3.0: version "8.3.0" resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== @@ -399,6 +387,11 @@ resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= +consola@^2.15.3: + version "2.15.3" + resolved "https://registry.yarnpkg.com/consola/-/consola-2.15.3.tgz#2e11f98d6a4be71ff72e0bdf07bd23e12cb61550" + integrity sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw== + cosmiconfig@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.1.tgz#714d756522cace867867ccb4474c5d01bbae5d6d" @@ -417,11 +410,6 @@ dependencies: postcss-selector-parser "^6.0.8" -css-color-names@^0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" - integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA= - css-has-pseudo@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/css-has-pseudo/-/css-has-pseudo-3.0.3.tgz#4824a34cb92dae7e09ea1d3fd19691b653412098" @@ -434,10 +422,21 @@ resolved "https://registry.yarnpkg.com/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz#ca8a22e5992c10a5b9d315155e7caee625903349" integrity sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA== -css-unit-converter@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/css-unit-converter/-/css-unit-converter-1.1.2.tgz#4c77f5a1954e6dbff60695ecb214e3270436ab21" - integrity sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA== +css-select@^4.1.3: + version "4.2.1" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.2.1.tgz#9e665d6ae4c7f9d65dbe69d0316e3221fb274cdd" + integrity sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ== + dependencies: + boolbase "^1.0.0" + css-what "^5.1.0" + domhandler "^4.3.0" + domutils "^2.8.0" + nth-check "^2.0.1" + +css-what@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-5.1.0.tgz#3f7b707aadf633baf62c2ceb8579b545bb40f7fe" + integrity sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw== cssdb@^6.1.0: version "6.1.0" @@ -500,6 +499,36 @@ resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79" integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== +dom-serializer@^1.0.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.3.2.tgz#6206437d32ceefaec7161803230c7a20bc1b4d91" + integrity sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.2.0" + entities "^2.0.0" + +domelementtype@^2.0.1, domelementtype@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57" + integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A== + +domhandler@^4.2.0, domhandler@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.0.tgz#16c658c626cf966967e306f966b431f77d4a5626" + integrity sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g== + dependencies: + domelementtype "^2.2.0" + +domutils@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" + integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== + dependencies: + dom-serializer "^1.0.1" + domelementtype "^2.2.0" + domhandler "^4.2.0" + dot-case@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" @@ -508,15 +537,15 @@ no-case "^3.0.4" tslib "^2.0.3" -dotenv-expand@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0" - integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA== +dotenv-expand@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-6.0.1.tgz#233328515e4b71091a6513e2ffe7e9a24b49bb0c" + integrity sha512-GNHcCOyRKLCXWnH3L/+sJ04PQxxgTOZDCPuQQnqkqPMGIilyoxHZ2JUNmh2VWKCfzVKH/AZsqcbuSYlDDVb/xw== -dotenv@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81" - integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== +dotenv@^14.3.2: + version "14.3.2" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-14.3.2.tgz#7c30b3a5f777c79a3429cb2db358eef6751e8369" + integrity sha512-vwEppIphpFdvaMCaHfCEv9IgwcxMljMw2TnAQBB4VWPvzXQLTb82jwmdOKzlEVUL3gNFT4l4TPKO+Bn+sqcrVQ== ejs@^3.1.6: version "3.1.6" @@ -526,15 +555,20 @@ jake "^10.6.1" electron-to-chromium@^1.4.17: - version "1.4.59" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.59.tgz#657f2588c048fb95975779f8fea101fad854de89" - integrity sha512-AOJ3cAE0TWxz4fQ9zkND5hWrQg16nsZKVz9INOot1oV//u4wWu5xrj9CQMmPTYskkZRunSRc9sAnr4EkexXokg== + version "1.4.61" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.61.tgz#97689f81b4ac5c996363d9ee7babd3406c44d6c3" + integrity sha512-kpzCOOFlx63C9qKRyIDEsKIUgzoe98ump7T4gU+/OLzj8gYkkWf2SIyBjhTSE0keAjMAp3i7C262YtkQOMYrGw== emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== +entities@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" + integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== + error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" @@ -677,7 +711,7 @@ resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-glob@^3.2.11, fast-glob@^3.2.7, fast-glob@^3.2.9: +fast-glob@^3.2.11, fast-glob@^3.2.9: version "3.2.11" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== @@ -783,14 +817,14 @@ dependencies: is-glob "^4.0.1" -glob-parent@^6.0.1: +glob-parent@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== dependencies: is-glob "^4.0.3" -glob@^7.1.3, glob@^7.1.7: +glob@^7.1.3: version "7.2.0" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== @@ -862,16 +896,11 @@ dependencies: function-bind "^1.1.1" -he@^1.2.0: +he@1.2.0, he@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== -hex-color-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" - integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== - hosted-git-info@^2.1.4: version "2.8.9" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" @@ -884,16 +913,6 @@ dependencies: lru-cache "^6.0.0" -hsl-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/hsl-regex/-/hsl-regex-1.0.0.tgz#d49330c789ed819e276a4c0d272dffa30b18fe6e" - integrity sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4= - -hsla-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38" - integrity sha1-wc56MWjIxmFAM6S194d/OyJfnDg= - html-minifier-terser@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#bfc818934cc07918f6b3669f5774ecdfd48f32ab" @@ -963,11 +982,6 @@ resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= -is-arrayish@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" - integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== - is-binary-path@~2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" @@ -975,18 +989,6 @@ dependencies: binary-extensions "^2.0.0" -is-color-stop@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345" - integrity sha1-z/9HGu5N1cnhWFmPvhKWe1za00U= - dependencies: - css-color-names "^0.0.4" - hex-color-regex "^1.1.0" - hsl-regex "^1.0.0" - hsla-regex "^1.0.0" - rgb-regex "^1.0.1" - rgba-regex "^1.0.0" - is-core-module@^2.5.0, is-core-module@^2.8.1: version "2.8.1" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211" @@ -1117,26 +1119,11 @@ resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== -lodash.topath@^4.5.2: - version "4.5.2" - resolved "https://registry.yarnpkg.com/lodash.topath/-/lodash.topath-4.5.2.tgz#3616351f3bba61994a0931989660bd03254fd009" - integrity sha1-NhY1Hzu6YZlKCTGYlmC9AyVP0Ak= - lodash.truncate@^4.4.2: version "4.4.2" resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= -lodash.uniq@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" - integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= - -lodash@^4.17.21: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - lower-case@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" @@ -1228,17 +1215,12 @@ resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== -modern-normalize@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/modern-normalize/-/modern-normalize-1.1.0.tgz#da8e80140d9221426bd4f725c6e11283d34f90b7" - integrity sha512-2lMlY1Yc1+CUy0gw4H95uNN7vjbpoED7NNRSBHE25nWfLBdmMzFCsPshlzbxHz+gYMcBEUN8V4pU16prcdPSgA== - ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -nanoid@^3.1.30: +nanoid@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.2.0.tgz#62667522da6673971cca916a6d3eff3f415ff80c" integrity sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA== @@ -1251,12 +1233,13 @@ lower-case "^2.0.2" tslib "^2.0.3" -node-emoji@^1.11.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.11.0.tgz#69a0150e6946e2f115e9d7ea4df7971e2628301c" - integrity sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A== +node-html-parser@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/node-html-parser/-/node-html-parser-5.2.0.tgz#6f29fd00d79f65334e7e20200964644207925607" + integrity sha512-fmiwLfQu+J2A0zjwSEkztSHexAf5qq/WoiL/Hgo1K7JpfEP+OGWY5maG0kGaM+IFVdixF/1QbyXaQ3h4cGfeLw== dependencies: - lodash "^4.17.21" + css-select "^4.1.3" + he "1.2.0" node-releases@^2.0.1: version "2.0.1" @@ -1298,6 +1281,13 @@ resolved "https://registry.yarnpkg.com/normalize-selector/-/normalize-selector-0.2.0.tgz#d0b145eb691189c63a78d201dc4fdb1293ef0c03" integrity sha1-0LFF62kRicY6eNIB3E/bEpPvDAM= +nth-check@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.0.1.tgz#2efe162f5c3da06a28959fbd3db75dbeea9f0fc2" + integrity sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w== + dependencies: + boolbase "^1.0.0" + object-hash@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-2.2.0.tgz#5ad518581eefc443bd763472b8ff2e9c2c0d54a5" @@ -1382,6 +1372,11 @@ resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== +pathe@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/pathe/-/pathe-0.2.0.tgz#30fd7bbe0a0d91f0e60bae621f5d19e9e225c339" + integrity sha512-sTitTPYnn23esFR3RlqYBWn4c45WGeLcsKzQiUpXJAyfcWkolvlYpV8FLo7JishK946oQwMFUCHXQ9AjGPKExw== + picocolors@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" @@ -1517,13 +1512,12 @@ resolved "https://registry.yarnpkg.com/postcss-initial/-/postcss-initial-4.0.1.tgz#529f735f72c5724a0fb30527df6fb7ac54d7de42" integrity sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ== -postcss-js@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-3.0.3.tgz#2f0bd370a2e8599d45439f6970403b5873abda33" - integrity sha512-gWnoWQXKFw65Hk/mi2+WTQTHdPD5UJdDXZmX073EY/B3BWnYjO4F4t0VneTCnCGQ5E5GsCdMkzPaTXwl3r5dJw== +postcss-js@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-4.0.0.tgz#31db79889531b80dc7bc9b0ad283e418dce0ac00" + integrity sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ== dependencies: camelcase-css "^2.0.1" - postcss "^8.1.6" postcss-lab-function@^4.0.3: version "4.0.3" @@ -1672,45 +1666,25 @@ cssesc "^3.0.0" util-deprecate "^1.0.2" -postcss-value-parser@^3.3.0: - version "3.3.1" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" - integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== - postcss-value-parser@^4.0.0, postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== -postcss@^8.1.6, postcss@^8.3.11, postcss@^8.3.5, postcss@^8.4.5: - version "8.4.5" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.5.tgz#bae665764dfd4c6fcc24dc0fdf7e7aa00cc77f95" - integrity sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg== +postcss@^8.4.5, postcss@^8.4.6: + version "8.4.6" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.6.tgz#c5ff3c3c457a23864f32cb45ac9b741498a09ae1" + integrity sha512-OovjwIzs9Te46vlEx7+uXB0PLijpwjXGKXjVGGPIGubGpq7uh5Xgf6D6FiJ/SzJMBosHDp6a2hiXOS97iBXcaA== dependencies: - nanoid "^3.1.30" + nanoid "^3.2.0" picocolors "^1.0.0" - source-map-js "^1.0.1" - -pretty-hrtime@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" - integrity sha1-t+PqQkNaTJsnWdmeDyAesZWALuE= + source-map-js "^1.0.2" punycode@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -purgecss@^4.0.3: - version "4.1.3" - resolved "https://registry.yarnpkg.com/purgecss/-/purgecss-4.1.3.tgz#683f6a133c8c4de7aa82fe2746d1393b214918f7" - integrity sha512-99cKy4s+VZoXnPxaoM23e5ABcP851nC2y2GROkkjS8eJaJtlciGavd7iYAw2V84WeBqggZ12l8ef44G99HmTaw== - dependencies: - commander "^8.0.0" - glob "^7.1.7" - postcss "^8.3.5" - postcss-selector-parser "^6.0.6" - queue-microtask@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" @@ -1767,14 +1741,6 @@ indent-string "^4.0.0" strip-indent "^3.0.0" -reduce-css-calc@^2.1.8: - version "2.1.8" - resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-2.1.8.tgz#7ef8761a28d614980dc0c982f772c93f7a99de03" - integrity sha512-8liAVezDmUcH+tdzoEGrhfbGcP7nOV4NkGE3a74+qqvE7nt9i4sKLGBuZNOnpI4WiGksiNPklZxva80061QiPg== - dependencies: - css-unit-converter "^1.1.1" - postcss-value-parser "^3.3.0" - relateurl@^0.2.7: version "0.2.7" resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" @@ -1795,7 +1761,7 @@ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== -resolve@^1.1.7, resolve@^1.10.0, resolve@^1.20.0: +resolve@^1.1.7, resolve@^1.10.0, resolve@^1.20.0, resolve@^1.21.0: version "1.22.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== @@ -1809,17 +1775,7 @@ resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rgb-regex@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1" - integrity sha1-wODWiC3w4jviVKR16O3UGRX+rrE= - -rgba-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" - integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= - -rimraf@^3.0.0, rimraf@^3.0.2: +rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== @@ -1827,9 +1783,9 @@ glob "^7.1.3" rollup@^2.59.0: - version "2.66.1" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.66.1.tgz#366b0404de353c4331d538c3ad2963934fcb4937" - integrity sha512-crSgLhSkLMnKr4s9iZ/1qJCplgAgrRY+igWv8KhG/AjKOJ0YX/WpmANyn8oxrw+zenF3BXWDLa7Xl/QZISH+7w== + version "2.67.0" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.67.0.tgz#496de7e641dbe39f681c5a82419cb5013917d406" + integrity sha512-W83AaERwvDiHwHEF/dfAfS3z1Be5wf7n+pO3ZAO5IQadCT2lBTr7WQ2MwZZe+nodbD+n3HtC4OCOAdsOPPcKZQ== optionalDependencies: fsevents "~2.3.2" @@ -1857,13 +1813,6 @@ resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.6.tgz#24e630c4b0f03fea446a2bd299e62b4a6ca8d0af" integrity sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ== -simple-swizzle@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" - integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= - dependencies: - is-arrayish "^0.3.1" - slash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" @@ -1878,7 +1827,7 @@ astral-regex "^2.0.0" is-fullwidth-code-point "^3.0.0" -source-map-js@^1.0.1: +source-map-js@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== @@ -2061,43 +2010,31 @@ string-width "^4.2.3" strip-ansi "^6.0.1" -tailwindcss@^2.2.19: - version "2.2.19" - resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-2.2.19.tgz#540e464832cd462bb9649c1484b0a38315c2653c" - integrity sha512-6Ui7JSVtXadtTUo2NtkBBacobzWiQYVjYW0ZnKaP9S1ZCKQ0w7KVNz+YSDI/j7O7KCMHbOkz94ZMQhbT9pOqjw== +tailwindcss@^3.0.18: + version "3.0.18" + resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.0.18.tgz#ea4825e6496d77dc21877b6b61c7cc56cda3add5" + integrity sha512-ihPTpEyA5ANgZbwKlgrbfnzOp9R5vDHFWmqxB1PT8NwOGCOFVVMl+Ps1cQQ369acaqqf1BEF77roCwK0lvNmTw== dependencies: arg "^5.0.1" - bytes "^3.0.0" chalk "^4.1.2" - chokidar "^3.5.2" - color "^4.0.1" + chokidar "^3.5.3" + color-name "^1.1.4" cosmiconfig "^7.0.1" detective "^5.2.0" didyoumean "^1.2.2" dlv "^1.1.3" - fast-glob "^3.2.7" - fs-extra "^10.0.0" - glob-parent "^6.0.1" - html-tags "^3.1.0" - is-color-stop "^1.1.0" - is-glob "^4.0.1" - lodash "^4.17.21" - lodash.topath "^4.5.2" - modern-normalize "^1.1.0" - node-emoji "^1.11.0" + fast-glob "^3.2.11" + glob-parent "^6.0.2" + is-glob "^4.0.3" normalize-path "^3.0.0" object-hash "^2.2.0" - postcss-js "^3.0.3" + postcss-js "^4.0.0" postcss-load-config "^3.1.0" postcss-nested "5.0.6" - postcss-selector-parser "^6.0.6" - postcss-value-parser "^4.1.0" - pretty-hrtime "^1.0.3" - purgecss "^4.0.3" + postcss-selector-parser "^6.0.9" + postcss-value-parser "^4.2.0" quick-lru "^5.1.1" - reduce-css-calc "^2.1.8" - resolve "^1.20.0" - tmp "^0.2.1" + resolve "^1.21.0" terser@^5.10.0: version "5.10.0" @@ -2108,13 +2045,6 @@ source-map "~0.7.2" source-map-support "~0.5.20" -tmp@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" - integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== - dependencies: - rimraf "^3.0.0" - to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" @@ -2187,19 +2117,24 @@ spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" -vite-plugin-html@^2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/vite-plugin-html/-/vite-plugin-html-2.1.2.tgz#aaf846a806b37e4884870e5ce1918166e9ce9125" - integrity sha512-7HXkL6n7M2qDEaUV4Vnz8yM2glW4gV36d5HSBIM5gOoAG1PkuQb4Vv9FTPgPiQxq4sPRf/6IgABX0MeLVW+CyQ== +vite-plugin-html@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/vite-plugin-html/-/vite-plugin-html-3.0.3.tgz#5f1375fd76ca0f8fb538a780940bc226739cbbe8" + integrity sha512-9X0AhjXB97JsxddzhIZ2/r0s6JfY4UUR5hJsl/dUNE+rR9fmjAgOJtDgE8ZNrSNy/x2SLgBA4O0S4gFwFkLQHw== dependencies: "@rollup/pluginutils" "^4.1.2" - dotenv "^10.0.0" - dotenv-expand "^5.1.0" + colorette "^2.0.16" + consola "^2.15.3" + dotenv "^14.3.2" + dotenv-expand "^6.0.1" ejs "^3.1.6" + fast-glob "^3.2.11" fs-extra "^10.0.0" html-minifier-terser "^6.1.0" + node-html-parser "^5.2.0" + pathe "^0.2.0" -vite@^2.6.14: +vite@^2.7.13: version "2.7.13" resolved "https://registry.yarnpkg.com/vite/-/vite-2.7.13.tgz#99b56e27dfb1e4399e407cf94648f5c7fb9d77f5" integrity sha512-Mq8et7f3aK0SgSxjDNfOAimZGW9XryfHRa/uV0jseQSilg+KhYDSoNb9h1rknOy6SuMkvNDLKCYAYYUMCE+IgQ==