Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions FS.FluentUI.sln
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "TestGrounds", "src\FS.Fluen
EndProject
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FS.FluentUI.V8toV9", "src\FS.FluentUI.V8toV9\FS.FluentUI.V8toV9.fsproj", "{779E8723-4AAE-4A79-A993-2C0AD0CCB10A}"
EndProject
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "Docs", "src\Docs\Docs.fsproj", "{9EBA10C7-BB27-4ED2-841E-C34C7E3F2727}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand All @@ -34,6 +36,10 @@ Global
{779E8723-4AAE-4A79-A993-2C0AD0CCB10A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{779E8723-4AAE-4A79-A993-2C0AD0CCB10A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{779E8723-4AAE-4A79-A993-2C0AD0CCB10A}.Release|Any CPU.Build.0 = Release|Any CPU
{9EBA10C7-BB27-4ED2-841E-C34C7E3F2727}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9EBA10C7-BB27-4ED2-841E-C34C7E3F2727}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9EBA10C7-BB27-4ED2-841E-C34C7E3F2727}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9EBA10C7-BB27-4ED2-841E-C34C7E3F2727}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{6DCB5EE1-8636-46D0-802B-5DE215645909} = {55E5674B-2084-494C-9CC6-E9CF7817605F}
Expand Down
12 changes: 12 additions & 0 deletions src/Docs/App.fs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
module Docs.App

open Elmish
open Elmish.React
open Docs.Model
open Docs.Update
open Docs.View

Program.mkProgram App.init App.update App.view
|> Program.withReactSynchronous "elmish-app"
|> Program.withConsoleTrace
|> Program.run
33 changes: 33 additions & 0 deletions src/Docs/Docs.fsproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
</PropertyGroup>

<ItemGroup>
<Compile Include="Router.fs" />
<Compile Include="SharedView.fs" />
<Folder Include="Pages\" />
<Compile Include="Model\App.fs" />
<Compile Include="Update\App.fs" />
<Compile Include="View\App.fs" />
<Compile Include="App.fs" />
<Content Include="README.md" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\FS.FluentUI\FS.FluentUI.fsproj" />
<ProjectReference Include="..\FS.FluentUI.V8toV9\Fs.FluentUI.V8toV9.fsproj" />
</ItemGroup>

<ItemGroup>
<PackageReference Include="Fable.Core" Version="4.3.0" />
<PackageReference Include="Fable.Elmish.React" Version="4.0.0" />
<PackageReference Include="Fable.SimpleHttp" Version="3.6.0" />
<PackageReference Include="Feliz" Version="2.9.0" />
<PackageReference Include="Feliz.Markdown" Version="2.4.0" />
<PackageReference Include="Feliz.Router" Version="4.0.0" />
</ItemGroup>

</Project>
14 changes: 14 additions & 0 deletions src/Docs/Model/App.fs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
module Docs.Model.App

open Elmish

type Model = {
CurrentUrl : string list
}

[<RequireQualifiedAccess>]
type Msg =
| DoNothing

let init () =
{ CurrentUrl = [""] }, Cmd.none
5 changes: 5 additions & 0 deletions src/Docs/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# DOCGEN

Using [Feliz.DaisyUI](https://github.com/dzoukr/Feliz.DaisyUI) and [a Feliz pull request](https://github.com/Freymaurer/Feliz/blob/master/docs/App.fs) docs for reference ontop of my own preferences and understanding.

Idea is to have pages written in markdown, and then reference components to insert into the renders where appropriate. This way we can have docs written in markdown rather than having to mess with Html.
274 changes: 274 additions & 0 deletions src/Docs/Router.fs
Original file line number Diff line number Diff line change
@@ -0,0 +1,274 @@
module Docs.Router

open Browser.Types
open Feliz.Router
open Fable.Core.JsInterop

type Page =
| Install
| FluentProvider
| MakeStyles
| MakeResetStyles
| BundleIcon
| Tokens
| TypographyStyles
| Themes
| MergeClasses
| Button
| CompoundButton
| MenuButton
| SplitButton
| ToggleButton
| Checkbox
| Combobox
| Dropdown
| Field
| Input
| Link
| Radio
| Select
| Slider
| SpinButton
| TextArea
| Switch
| Icon
| SearchBox
| SwatchPicker
| TagPicker
| DatePicker
| Calendar
| TimePicker
| DataGrid
| VirtualizedDataGrid
| Table
| Tree
| FlatTree
| Accordion
| Menu
| TabList
| Card
| Dialog
| Divider
| Popover
| Portal
| Toolbar
| Toast
| Skeleton
| MessageBar
| Drawer
| TeachingPopover
| Carousel
| Avatar
| AvatarGroup
| Badge
| CounterBadge
| PresenceBadge
| Image
| Persona
| ProgressBar
| Spinner
| TagGroup
| InteractionTag
| Text
| Tooltip
| InfoLabel
| InfoButton
| Breadcrumb
| Rating
| Overflow
| UseArrowNavigationGroup
| UseFocusableGroup
| UseFocusFinders
| UseKeyboardNavAttribute
| UseModalAttributes
| UseId
| CreatePresenceComponent
| CreateMotionComponent
| VirtualizerScrollView
| Nav

[<RequireQualifiedAccess>]
module Page =
let defaultPage = Page.Install

let parseFromUrlSegments = function
| [ "install" ] -> Page.Install
| [ "fluentprovider" ] -> Page.FluentProvider
| [ "makestyles" ] -> Page.MakeStyles
| [ "makeresetstyles" ] -> Page.MakeResetStyles
| [ "bundleicon" ] -> Page.BundleIcon
| [ "tokens" ] -> Page.Tokens
| [ "typographystyles" ] -> Page.TypographyStyles
| [ "themes" ] -> Page.Themes
| [ "mergeclasses" ] -> Page.MergeClasses
| [ "button" ] -> Page.Button
| [ "compoundbutton" ] -> Page.CompoundButton
| [ "menubutton" ] -> Page.MenuButton
| [ "splitbutton" ] -> Page.SplitButton
| [ "togglebutton" ] -> Page.ToggleButton
| [ "checkbox" ] -> Page.Checkbox
| [ "combobox" ] -> Page.Combobox
| [ "dropdown" ] -> Page.Dropdown
| [ "field" ] -> Page.Field
| [ "input" ] -> Page.Input
| [ "link" ] -> Page.Link
| [ "radio" ] -> Page.Radio
| [ "select" ] -> Page.Select
| [ "slider" ] -> Page.Slider
| [ "spinbutton" ] -> Page.SpinButton
| [ "textarea" ] -> Page.TextArea
| [ "switch" ] -> Page.Switch
| [ "icon" ] -> Page.Icon
| [ "searchbox" ] -> Page.SearchBox
| [ "swatchpicker" ] -> Page.SwatchPicker
| [ "tagpicker" ] -> Page.TagPicker
| [ "datepicker" ] -> Page.DatePicker
| [ "calendar" ] -> Page.Calendar
| [ "timepicker" ] -> Page.TimePicker
| [ "datagrid" ] -> Page.DataGrid
| [ "virtualizeddatagrid" ] -> Page.VirtualizedDataGrid
| [ "table" ] -> Page.Table
| [ "tree" ] -> Page.Tree
| [ "flattree" ] -> Page.FlatTree
| [ "accordion" ] -> Page.Accordion
| [ "menu" ] -> Page.Menu
| [ "tablist" ] -> Page.TabList
| [ "card" ] -> Page.Card
| [ "dialog" ] -> Page.Dialog
| [ "divider" ] -> Page.Divider
| [ "popover" ] -> Page.Popover
| [ "portal" ] -> Page.Portal
| [ "toolbar" ] -> Page.Toolbar
| [ "toast" ] -> Page.Toast
| [ "skeleton" ] -> Page.Skeleton
| [ "messagebar" ] -> Page.MessageBar
| [ "drawer" ] -> Page.Drawer
| [ "teachingpopover" ] -> Page.TeachingPopover
| [ "carousel" ] -> Page.Carousel
| [ "avatar" ] -> Page.Avatar
| [ "avatargroup" ] -> Page.AvatarGroup
| [ "badge" ] -> Page.Badge
| [ "counterbadge" ] -> Page.CounterBadge
| [ "presencebadge" ] -> Page.PresenceBadge
| [ "image" ] -> Page.Image
| [ "persona" ] -> Page.Persona
| [ "progressbar" ] -> Page.ProgressBar
| [ "spinner" ] -> Page.Spinner
| [ "taggroup" ] -> Page.TagGroup
| [ "interactiontag" ] -> Page.InteractionTag
| [ "text" ] -> Page.Text
| [ "tooltip" ] -> Page.Tooltip
| [ "infolabel" ] -> Page.InfoLabel
| [ "infobutton" ] -> Page.InfoButton
| [ "breadcrumb" ] -> Page.Breadcrumb
| [ "rating" ] -> Page.Rating
| [ "overflow" ] -> Page.Overflow
| [ "usearrownavigationgroup" ] -> Page.UseArrowNavigationGroup
| [ "usefocusablegroup" ] -> Page.UseFocusableGroup
| [ "usefocusfinders" ] -> Page.UseFocusFinders
| [ "usekeyboardnavattribute" ] -> Page.UseKeyboardNavAttribute
| [ "usemodalattributes" ] -> Page.UseModalAttributes
| [ "useid" ] -> Page.UseId
| [ "createpresencecomponent" ] -> Page.CreatePresenceComponent
| [ "createmotioncomponent" ] -> Page.CreateMotionComponent
| [ "virtualizerscrollview" ] -> Page.VirtualizerScrollView
| [ "nav" ] -> Page.Nav
| _ -> defaultPage

let noQueryString segments : string list * (string * string) list = segments, []

let toUrlSegments = function
| Page.Install -> [ "install" ] |> noQueryString
| Page.FluentProvider -> [ "fluentprovider" ] |> noQueryString
| Page.MakeStyles -> [ "makestyles" ] |> noQueryString
| Page.MakeResetStyles -> [ "makeresetstyles" ] |> noQueryString
| Page.BundleIcon -> [ "bundleicon" ] |> noQueryString
| Page.Tokens -> [ "tokens" ] |> noQueryString
| Page.TypographyStyles -> [ "typographystyles" ] |> noQueryString
| Page.Themes -> [ "themes" ] |> noQueryString
| Page.MergeClasses -> [ "mergeclasses" ] |> noQueryString
| Page.Button -> [ "button" ] |> noQueryString
| Page.CompoundButton -> [ "compoundbutton" ] |> noQueryString
| Page.MenuButton -> [ "menubutton" ] |> noQueryString
| Page.SplitButton -> [ "splitbutton" ] |> noQueryString
| Page.ToggleButton -> [ "togglebutton" ] |> noQueryString
| Page.Checkbox -> [ "checkbox" ] |> noQueryString
| Page.Combobox -> [ "combobox" ] |> noQueryString
| Page.Dropdown -> [ "dropdown" ] |> noQueryString
| Page.Field -> [ "field" ] |> noQueryString
| Page.Input -> [ "input" ] |> noQueryString
| Page.Link -> [ "link" ] |> noQueryString
| Page.Radio -> [ "radio" ] |> noQueryString
| Page.Select -> [ "select" ] |> noQueryString
| Page.Slider -> [ "slider" ] |> noQueryString
| Page.SpinButton -> [ "spinbutton" ] |> noQueryString
| Page.TextArea -> [ "textarea" ] |> noQueryString
| Page.Switch -> [ "switch" ] |> noQueryString
| Page.Icon -> [ "icon" ] |> noQueryString
| Page.SearchBox -> [ "searchbox" ] |> noQueryString
| Page.SwatchPicker -> [ "swatchpicker" ] |> noQueryString
| Page.TagPicker -> [ "tagpicker" ] |> noQueryString
| Page.DatePicker -> [ "datepicker" ] |> noQueryString
| Page.Calendar -> [ "calendar" ] |> noQueryString
| Page.TimePicker -> [ "timepicker" ] |> noQueryString
| Page.DataGrid -> [ "datagrid" ] |> noQueryString
| Page.VirtualizedDataGrid -> [ "virtualizeddatagrid" ] |> noQueryString
| Page.Table -> [ "table" ] |> noQueryString
| Page.Tree -> [ "tree" ] |> noQueryString
| Page.FlatTree -> [ "flattree" ] |> noQueryString
| Page.Accordion -> [ "accordion" ] |> noQueryString
| Page.Menu -> [ "menu" ] |> noQueryString
| Page.TabList -> [ "tablist" ] |> noQueryString
| Page.Card -> [ "card" ] |> noQueryString
| Page.Dialog -> [ "dialog" ] |> noQueryString
| Page.Divider -> [ "divider" ] |> noQueryString
| Page.Popover -> [ "popover" ] |> noQueryString
| Page.Portal -> [ "portal" ] |> noQueryString
| Page.Toolbar -> [ "toolbar" ] |> noQueryString
| Page.Toast -> [ "toast" ] |> noQueryString
| Page.Skeleton -> [ "skeleton" ] |> noQueryString
| Page.MessageBar -> [ "messagebar" ] |> noQueryString
| Page.Drawer -> [ "drawer" ] |> noQueryString
| Page.TeachingPopover -> [ "teachingpopover" ] |> noQueryString
| Page.Carousel -> [ "carousel" ] |> noQueryString
| Page.Avatar -> [ "avatar" ] |> noQueryString
| Page.AvatarGroup -> [ "avatargroup" ] |> noQueryString
| Page.Badge -> [ "badge" ] |> noQueryString
| Page.CounterBadge -> [ "counterbadge" ] |> noQueryString
| Page.PresenceBadge -> [ "presencebadge" ] |> noQueryString
| Page.Image -> [ "image" ] |> noQueryString
| Page.Persona -> [ "persona" ] |> noQueryString
| Page.ProgressBar -> [ "progressbar" ] |> noQueryString
| Page.Spinner -> [ "spinner" ] |> noQueryString
| Page.TagGroup -> [ "taggroup" ] |> noQueryString
| Page.InteractionTag -> [ "interactiontag" ] |> noQueryString
| Page.Text -> [ "text" ] |> noQueryString
| Page.Tooltip -> [ "tooltip" ] |> noQueryString
| Page.InfoLabel -> [ "infolabel" ] |> noQueryString
| Page.InfoButton -> [ "infobutton" ] |> noQueryString
| Page.Breadcrumb -> [ "breadcrumb" ] |> noQueryString
| Page.Rating -> [ "rating" ] |> noQueryString
| Page.Overflow -> [ "overflow" ] |> noQueryString
| Page.UseArrowNavigationGroup -> [ "usearrownavigationgroup" ] |> noQueryString
| Page.UseFocusableGroup -> [ "usefocusablegroup" ] |> noQueryString
| Page.UseFocusFinders -> [ "usefocusfinders" ] |> noQueryString
| Page.UseKeyboardNavAttribute -> [ "usekeyboardnavattribute" ] |> noQueryString
| Page.UseModalAttributes -> [ "usemodalattributes" ] |> noQueryString
| Page.UseId -> [ "useid" ] |> noQueryString
| Page.CreatePresenceComponent -> [ "createpresencecomponent" ] |> noQueryString
| Page.CreateMotionComponent -> [ "createmotioncomponent" ] |> noQueryString
| Page.VirtualizerScrollView -> [ "virtualizerscrollview" ] |> noQueryString
| Page.Nav -> [ "nav" ] |> noQueryString

[<RequireQualifiedAccess>]
module Router =
let goToUrl (e: MouseEvent) =
e.preventDefault()
let href : string = !!e.currentTarget?attributes?href?value
Router.navigate href

let navigatePage (p:Page) = p |> Page.toUrlSegments |> Router.navigate

[<RequireQualifiedAccess>]
module Cmd =
let navigatePage (p:Page) = p |> Page.toUrlSegments |> Cmd.navigate
9 changes: 9 additions & 0 deletions src/Docs/SharedView.fs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
module Docs.SharedView

open FS.FluentUI
open Feliz
open Router

type menuItem
with
static member inline href (p:Page) = Interop.mkProperty<IMenuItemProp> "href" (p |> Page.toUrlSegments |> Router.format)
8 changes: 8 additions & 0 deletions src/Docs/Update/App.fs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
module Docs.Update.App

open Elmish
open Docs.Model

let update msg model =
match msg with
| App.Msg.DoNothing -> model, Cmd.none
8 changes: 8 additions & 0 deletions src/Docs/View/App.fs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
module Docs.View.App

open Feliz

let view model dispatch =
Html.div [

]