diff --git a/PanoramicData.Blazor.Demo/Pages/PDFileExplorerDocumentation.razor b/PanoramicData.Blazor.Demo/Pages/PDFileExplorerDocumentation.razor index 7d0f9bbe6..a0ba2c231 100644 --- a/PanoramicData.Blazor.Demo/Pages/PDFileExplorerDocumentation.razor +++ b/PanoramicData.Blazor.Demo/Pages/PDFileExplorerDocumentation.razor @@ -55,6 +55,14 @@ +
+

Styling

+

+ A line separates the toolbar from the folders and files below it. It is drawn with --pd-file-explorer-toolbar-border, + which defaults to 1px solid var(--bs-border-color). Set it to none to leave the line out. +

+
+

Methods

diff --git a/PanoramicData.Blazor.Demo/Pages/PDFileModalsDocumentation.razor b/PanoramicData.Blazor.Demo/Pages/PDFileModalsDocumentation.razor index 0461bf0d7..370e75046 100644 --- a/PanoramicData.Blazor.Demo/Pages/PDFileModalsDocumentation.razor +++ b/PanoramicData.Blazor.Demo/Pages/PDFileModalsDocumentation.razor @@ -9,6 +9,8 @@ + +
ParameterTypeDescription
DataProviderIFileExplorerDataProviderFile system provider
ButtonSizeButtonSizesSize of every button in the dialog: the explorer's toolbar, the foot of the dialog and its overwrite confirmation. Defaults to Medium
CancelButtonIconCssClassstringIcon on the Cancel button, and on No when asked whether to overwrite. Defaults to fas fa-fw fa-times
diff --git a/PanoramicData.Blazor.Demo/Pages/PDFileModalsPage.razor b/PanoramicData.Blazor.Demo/Pages/PDFileModalsPage.razor index e1a143d9d..2e7cce6e0 100644 --- a/PanoramicData.Blazor.Demo/Pages/PDFileModalsPage.razor +++ b/PanoramicData.Blazor.Demo/Pages/PDFileModalsPage.razor @@ -60,7 +60,8 @@

Customised Button Text and Icons

Use OpenButtonText, OpenButtonIconCssClass, SaveButtonText, and SaveButtonIconCssClass - to replace the default button labels and icons. + to replace the default button labels and icons, CancelButtonIconCssClass for the Cancel and No buttons' icon, + and ButtonSize for the size of every button, the toolbar's included. Below, every button is small and Cancel shows a circled cross.

Verifies that, unless chosen otherwise, the buttons stay medium sized and Cancel keeps its cross. + [Fact] + public async Task Buttons_are_medium_with_a_cross_on_cancel_by_default() + { + var component = RenderModal(); + + await ShowOpenAsync(component); + + FooterButton(component, "Cancel").ClassList.Should().NotContain("btn-sm"); + FooterButton(component, "Cancel").QuerySelector(".fa-times").Should().NotBeNull(); + } + + /// Verifies that the button size reaches every button, toolbar included, and the dismissing icon reaches Cancel and the overwrite confirmation's No. + [Fact] + public async Task Button_size_and_the_dismissing_icon_can_be_replaced() + { + var component = RenderModal(p => p + .Add(x => x.ButtonSize, ButtonSizes.Small) + .Add(x => x.CancelButtonIconCssClass, "fa-regular fa-fw fa-circle-xmark") + .Add(x => x.ShowToolbar, true)); + + await ShowOpenAsync(component); + + component.Find(".pdfe-toolbar #pd-tbr-btn-refresh").ClassList.Should().Contain("btn-sm"); + OkButton(component).ClassList.Should().Contain("btn-sm"); + FooterButton(component, "Cancel").ClassList.Should().Contain("btn-sm"); + FooterButton(component, "Cancel").QuerySelector(".fa-circle-xmark").Should().NotBeNull(); + ConfirmButton(component, "No").ClassList.Should().Contain("btn-sm"); + ConfirmButton(component, "No").QuerySelector(".fa-circle-xmark").Should().NotBeNull(); + } + /// Verifies that refreshing asks the data provider for the folder contents again. [Fact] public async Task Refreshing_requests_the_contents_again() diff --git a/PanoramicData.Blazor/PDFileExplorer.razor.css b/PanoramicData.Blazor/PDFileExplorer.razor.css index 1132497c2..39f91baf5 100644 --- a/PanoramicData.Blazor/PDFileExplorer.razor.css +++ b/PanoramicData.Blazor/PDFileExplorer.razor.css @@ -21,8 +21,10 @@ font-style: italic; } +/* As tall as its buttons and their padding, with a line below; set --pd-file-explorer-toolbar-border to none to leave it out */ .pdfileexplorer .pdfe-toolbar { - height: 50px; + flex: none; + border-bottom: var(--pd-file-explorer-toolbar-border, 1px solid var(--bs-border-color, #dee2e6)); } .pdfileexplorer .preview-header { diff --git a/PanoramicData.Blazor/PDFileModal.razor b/PanoramicData.Blazor/PDFileModal.razor index d890bb67d..65a6ede96 100644 --- a/PanoramicData.Blazor/PDFileModal.razor +++ b/PanoramicData.Blazor/PDFileModal.razor @@ -1,13 +1,16 @@ 
Are you sure you wish to overwrite '@_filenameTextbox.Value'? diff --git a/PanoramicData.Blazor/PDFileModal.razor.cs b/PanoramicData.Blazor/PDFileModal.razor.cs index f1467defb..60ab969b1 100644 --- a/PanoramicData.Blazor/PDFileModal.razor.cs +++ b/PanoramicData.Blazor/PDFileModal.razor.cs @@ -106,6 +106,16 @@ public partial class PDFileModal /// [Parameter] public ModalSizes Size { get; set; } = ModalSizes.Large; + /// + /// Gets or sets the size of every button in the dialog: the explorer's toolbar, the foot of the modal and its overwrite confirmation. + /// + [Parameter] public ButtonSizes ButtonSize { get; set; } = ButtonSizes.Medium; + + /// + /// Gets or sets the icon on the buttons that dismiss the dialog: Cancel, and No when asked whether to overwrite. + /// + [Parameter] public string CancelButtonIconCssClass { get; set; } = "fas fa-fw fa-times"; + /// /// Gets or sets whether the modal should hide when the background is clicked. /// @@ -169,6 +179,13 @@ protected override void OnInitialized() _filenameTextbox.Keypress = OnFilenameKeypress; } + /// + protected override void OnParametersSet() + { + _cancelButton.IconCssClass = CancelButtonIconCssClass; + _noButton.IconCssClass = CancelButtonIconCssClass; + } + private string? GetItemIconCssClassInternal(FileExplorerItem item) => GetItemIconCssClass is null ? null : GetItemIconCssClass(item); /// diff --git a/PanoramicData.Blazor/wwwroot/css/main.css b/PanoramicData.Blazor/wwwroot/css/main.css index d24a83b6b..a8b5191e7 100644 --- a/PanoramicData.Blazor/wwwroot/css/main.css +++ b/PanoramicData.Blazor/wwwroot/css/main.css @@ -157,7 +157,7 @@ /* PDSplitter - the gutters are created by split.js */ .pdsplitter .gutter { - background-color: var(--pd-splitter-gutter-bg, #eee); + background-color: var(--pd-splitter-gutter-bg, var(--bs-border-color, #eee)); transition: background-color 0.1s ease-out; } @@ -527,12 +527,22 @@ } /* PDFileExplorer */ +/* The top folder sits a little below whatever is above the tree, rather than against it */ .pdfileexplorer.pdfileexplorer .pdtree { height: 0; + box-sizing: border-box; + padding-top: 0.5rem; } +/* The top folder lines up with the toolbar's first button: the toolbar's padding, less the drop zone's 1px border */ +.pdfileexplorer.pdfileexplorer .pdtree > .pdtreenode { + padding-left: calc(0.5rem - 1px); +} + +/* The splitter takes the height the toolbar leaves */ .pdfileexplorer.pdfileexplorer .pdsplitter.horizontal { - height: calc(100% - 50px); + flex: 1 1 0; + min-height: 0; } .pdfileexplorer.pdfileexplorer.pdfe-no-toolbar .pdsplitter.horizontal { @@ -555,14 +565,26 @@ } /* PDFileModal */ +/* The dialog's body has no padding (p-0), so the toolbar's own spacing is the only spacing and the panes run edge to edge */ .pdfilemodalexplorer.pdfilemodalexplorer .pdfileexplorer { height: 100%; + padding-bottom: 0; } .pdfilemodalexplorer.pdfilemodalexplorer .pdsplitter { flex-grow: 1; } +/* In the dialog the toolbar's buttons and the top folder line up with the title and the footer's buttons, 1rem in */ +.pdfilemodalexplorer.pdfilemodalexplorer .pdfe-toolbar .pdtoolbar { + padding-left: 1rem; + padding-right: 1rem; +} + +.pdfilemodalexplorer.pdfilemodalexplorer .pdtree > .pdtreenode { + padding-left: calc(1rem - 1px); +} + /* PDFilter */ .pd-filter.pd-filter .filter-icon { color: var(--bs-primary) !important; @@ -842,6 +864,12 @@ padding-left: 0; } +/* A hidden first item, such as an Up button turned off, must not leave the next one indented */ +.pdtoolbar .pdtoolbaritem.pd-hidden:first-child + .pdtoolbaritem, +.pdtoolbar .pdtoolbaritem.d-none:first-child + .pdtoolbaritem { + padding-left: 0; +} + .pdtoolbar .pdtoolbaritem:last-child { padding-right: 0; } diff --git a/PanoramicData.Blazor/wwwroot/css/main.min.css b/PanoramicData.Blazor/wwwroot/css/main.min.css index 28ec6f781..0da85bdaa 100644 --- a/PanoramicData.Blazor/wwwroot/css/main.min.css +++ b/PanoramicData.Blazor/wwwroot/css/main.min.css @@ -1 +1 @@ -.cursor-pointer{cursor:pointer;}.fa-hidden{color:transparent;}.pd-pointer{cursor:pointer;}.pd-hidden{display:none!important;}.pd-empty-icon{height:16px;width:16px;}.resize-h{overflow:auto;resize:vertical;}.resize-w{overflow:auto;resize:horizontal;}.h-100{height:100px!important;}.h-200{height:200px!important;}.h-300{height:300px!important;}.h-400{height:400px!important;}.h-500{height:500px!important;}.h-100-pct{height:100%;}.w-100-pct{width:100%;}.w-100-px{width:100px;}.w-125-px{width:125px;}.w-150-px{width:150px;}.w-200-px{width:200px;}.mh-50-px{min-height:50px;}.mh-100-px{min-height:100px;}.mh-150-px{min-height:150px;}.mh-200-px{min-height:200px;}.mh-250-px{min-height:250px;}.mh-300-px{min-height:300px;}.mw-100-px{min-width:100px;}.mw-125-px{min-width:125px;}.mw-150-px{min-width:150px;}.mw-200-px{min-width:200px;}.text-small{font-size:.75rem;}.text-tiny{font-size:.5rem;}.z-1000{z-index:1000;}.z-1100{z-index:1100;}.z-1200{z-index:1200;}.pd-form-body .title-box{width:var(--title-width,200px)!important;min-width:var(--title-width,200px)!important;max-width:var(--title-width,200px)!important;flex:0 0 var(--title-width,200px)!important;}.pdsplitter .gutter{background-color:var(--pd-splitter-gutter-bg,#eee);transition:background-color .1s ease-out;}.pdsplitter .gutter-vertical{cursor:row-resize;}.pdsplitter .gutter-horizontal{cursor:col-resize;}.pd-studio .pdsplitter>.gutter{background-color:var(--pd-studio-gutter-bg,var(--pd-splitter-gutter-bg,var(--bs-tertiary-bg,#eee)));}.pdsplitter .gutter:active,.pdsplitter .gutter:hover{background-color:var(--pd-splitter-gutter-hover-bg,var(--bs-primary,#0d6efd));transition:background-color .15s ease-in var(--pd-splitter-gutter-hover-delay,.2s);}.pdsplitter .gutter:active{transition-delay:0s;}.pd-studio .pdtoolbar.pd-studio-toolbar{padding:var(--pd-studio-toolbar-padding,.375rem var(--_pds-toolbar-padding-x,0));border-bottom:var(--pd-studio-toolbar-border-bottom,1px solid var(--_pds-border-color));}.pd-studio .pdtoolbar.pd-studio-toolbar{column-gap:.75rem;}.pd-studio .pdtoolbar.pd-studio-toolbar>.pdtoolbaritem{padding-left:0;padding-right:0;}.pd-studio .pdtoolbar.pd-studio-toolbar .pdts-bar{border-left-color:var(--pd-studio-separator-color,var(--bs-secondary,#6c757d));}.pd-studio .pdtoolbarbutton.pd-studio-execute{min-width:var(--pd-studio-execute-min-width,5.5rem)}.pd-studio .pd-studio-editor-container .pd-monacoeditor{border:none;}.pdfilepreview .stacked{align-items:center;display:flex;flex-direction:column;text-align:center;}.pdfilepreview .stacked span{margin-top:4px;}.pdfilepreview .h1,.pdfilepreview .h4,.pdfilepreview h2,.pdfilepreview h3{margin:0!important;padding:0!important;}.pdchat-message .pdchat-partial blockquote,.pdchat-message .pdchat-partial h1,.pdchat-message .pdchat-partial h2,.pdchat-message .pdchat-partial h3,.pdchat-message .pdchat-partial h4,.pdchat-message .pdchat-partial h5,.pdchat-message .pdchat-partial h6,.pdchat-message .pdchat-partial li,.pdchat-message .pdchat-partial ol,.pdchat-message .pdchat-partial p,.pdchat-message .pdchat-partial table,.pdchat-message .pdchat-partial ul,.pdchat-message .pdchat-text blockquote,.pdchat-message .pdchat-text h1,.pdchat-message .pdchat-text h2,.pdchat-message .pdchat-text h3,.pdchat-message .pdchat-text h4,.pdchat-message .pdchat-text h5,.pdchat-message .pdchat-text h6,.pdchat-message .pdchat-text li,.pdchat-message .pdchat-text ol,.pdchat-message .pdchat-text p,.pdchat-message .pdchat-text table,.pdchat-message .pdchat-text ul{white-space:normal;}.pdchat-message .pdchat-partial p,.pdchat-message .pdchat-text p{margin:0 0 .5em;}.pdchat-message .pdchat-partial ol,.pdchat-message .pdchat-partial ul,.pdchat-message .pdchat-text ol,.pdchat-message .pdchat-text ul{margin:.25em 0 .5em;padding-left:1.5em;}.pdchat-message .pdchat-partial li+li,.pdchat-message .pdchat-text li+li{margin-top:.15em;}.pdchat-message .pdchat-partial li>p,.pdchat-message .pdchat-text li>p{margin:0;}.pdchat-message .pdchat-partial ol:last-child,.pdchat-message .pdchat-partial p:last-child,.pdchat-message .pdchat-partial ul:last-child,.pdchat-message .pdchat-text ol:last-child,.pdchat-message .pdchat-text p:last-child,.pdchat-message .pdchat-text ul:last-child{margin-bottom:0;}.pdchat-message .pdchat-partial table{border-collapse:collapse;font-size:.95em;}.pdchat-message .pdchat-partial td,.pdchat-message .pdchat-partial th{border:1px solid var(--pd-chat-border,#dee2e6);padding:.15rem .4rem;text-align:left;}.pdchat-container .pdchat-conversation-main .pdchat-conversation-tabset{display:flex;flex-direction:column;flex:1 1 auto;min-height:0;}.pdchat-container .pdchat-conversation-main .pdchat-conversation-tabset .pdtabset-content{flex:1 1 auto;min-height:0;display:flex;flex-direction:column;overflow:hidden;}.pdchat-container .pdchat-conversation-main .pdtabset-tab.pdchat-conversation-tab-unread::before{content:"\25CF";margin-right:4px;font-size:.625rem;line-height:1;color:var(--pd-chat-info-border,#0078d4);}.pdchat-container .pdchat-conversation-main .pdtabset-tab.pdchat-conversation-tab-unread .pdtabset-tab-title{font-weight:600;}.pdchat-container-wrapper.pdchat-container-wrapper.pdchat-split-inactive .pdchat-chat-panel{flex:0 0 0%!important;width:0!important;min-width:0!important;padding:0!important;border:none!important;overflow:hidden!important;}.pdchat-container-wrapper.pdchat-container-wrapper.pdchat-split-inactive .pdchat-content-panel{flex:1 1 100%!important;width:100%!important;}.pdchat-container-wrapper.pdchat-container-wrapper.pdchat-split-inactive .pdchat-container-splitter>.gutter{display:none!important;width:0!important;min-width:0!important;}.pdchat-container-wrapper.pdchat-container-wrapper .pdchat-container.dock-left,.pdchat-container-wrapper.pdchat-container-wrapper .pdchat-container.dock-right{position:static!important;transform:none!important;top:auto!important;left:auto!important;right:auto!important;bottom:auto!important;width:100%!important;height:100%!important;z-index:auto!important;}.pdchat-container-wrapper.pdchat-container-wrapper .pdchat-window{width:100%!important;height:100%!important;max-width:none!important;max-height:none!important;border-radius:0!important;box-shadow:none!important;}@media(max-width:767px){.pdchat-container-wrapper.pdchat-container-wrapper:not(.pdchat-split-inactive) .pdchat-chat-panel{position:fixed!important;inset:0!important;width:100%!important;height:100%!important;z-index:10000!important;}.pdchat-container-wrapper.pdchat-container-wrapper:not(.pdchat-split-inactive) .pdchat-content-panel{flex:1 1 100%!important;width:100%!important;}.pdchat-container-wrapper.pdchat-container-wrapper:not(.pdchat-split-inactive) .pdchat-container-splitter>.gutter{display:none!important;}}.pd-list .filter input{border-top-right-radius:0!important;border-bottom-right-radius:0!important;}.pd-list .filter .input-group-text{border-top-left-radius:0!important;border-bottom-left-radius:0!important;}.pdtoolbartextbox.pdtoolbartextbox input{min-width:0;width:100%;}.pdtoolbarbuttonitem .pdtoolbarbutton{white-space:nowrap;}.pdtoolbardropdown .pdtoolbarbutton{white-space:nowrap;border-radius:var(--bs-border-radius,.375rem);display:inline-flex;align-items:center;line-height:1.5;}.pdtoolbardropdown .pdtoolbarbutton.dropdown-toggle{padding:.375rem .75rem;border:1px solid var(--bs-border-color,#dee2e6);border-radius:var(--bs-border-radius,.375rem);background-color:var(--bs-body-bg,#fff);color:var(--bs-body-color,#212529);transition:all .15s ease-in-out;display:inline-flex;align-items:center;gap:.5rem;line-height:1.5;}.pdtoolbardropdown .pdtoolbarbutton.dropdown-toggle:hover{background-color:var(--bs-secondary-bg,#e9ecef);border-color:var(--bs-border-color-translucent,#adb5bd);}.pdtoolbardropdown .pdtoolbarbutton.dropdown-toggle::after{margin-left:auto;}.pdtoolbardropdown .pdtoolbarbutton.dropdown-toggle>span{display:inline-flex;align-items:center;gap:.5rem;}.pd-dropdown.pd-dropdown .dropdown-menu ul{list-style:none;padding:0;margin:0;}.pd-dropdown.pd-dropdown .dropdown-menu li{list-style:none;padding:0;margin:0;cursor:pointer;transition:background-color .15s ease-in-out;}.pd-dropdown.pd-dropdown .dropdown-menu li:hover{background-color:var(--bs-secondary-bg);}.pd-dropdown.pd-dropdown .dropdown-menu li .pd-label{display:block;padding:.5rem 1rem;color:var(--bs-body-color);text-decoration:none;white-space:nowrap;width:100%;}.pdfileexplorer.pdfileexplorer .pdtree{height:0;}.pdfileexplorer.pdfileexplorer .pdsplitter.horizontal{height:calc(100% - 50px);}.pdfileexplorer.pdfileexplorer.pdfe-no-toolbar .pdsplitter.horizontal{height:100%;}.pdfileexplorer.pdfileexplorer .pddropzone.dz-drag-hover{background-color:unset;border-color:transparent;}.pdfileexplorer.pdfileexplorer .pdtablerow:hover td{background-color:var(--bs-tertiary-bg,rgba(128,128,128,.15));}.pdfileexplorer.pdfileexplorer .pdtablerow.selected:hover td{background-color:var(--pd-selected-bg,var(--bs-primary));}.pdfilemodalexplorer.pdfilemodalexplorer .pdfileexplorer{height:100%;}.pdfilemodalexplorer.pdfilemodalexplorer .pdsplitter{flex-grow:1;}.pd-filter.pd-filter .filter-icon{color:var(--bs-primary)!important;}.pd-filter.pd-filter:not(.filtered) .filter-icon{opacity:.3;}.pd-filter.pd-filter .pd-dropdown>button{border:none!important;background:unset!important;}.pd-filter .filter-toolbar .pd-button{flex:1;}.pd-form-body .pdtoggleswitch.disabled{background-color:#e9ecef;}.pd-form-body .fg-1{flex-grow:1;}.pd-form-body .fg-2{flex-grow:2;}.pd-form-body .fg-3{flex-grow:3;}.pd-form-body .fg-4{flex-grow:4;}.pd-form-body .fg-5{flex-grow:5;}.pd-form-body .fg-6{flex-grow:6;}.pd-form-body .fg-7{flex-grow:7;}.pd-form-body .fg-8{flex-grow:8;}.pd-form-body .fg-9{flex-grow:9;}.pd-form-field-editor .monaco-editor-container{display:grid;height:100%;grid-template-columns:minmax(0,auto);}.pd-form-field-editor.editor .form-control{border:none;}.pd-form-field-editor .ms-nullable{margin:0 4px 2px 12px;line-height:.5rem;vertical-align:middle;padding:0;width:16px;}.pd-form-field-editor.editor .pddatetime input{flex-grow:1;}.pd-form-field-editor.editor .pddatetimeoffset input{flex-grow:1;}.pd-form-field-editor.editor .no-resize{resize:none;}.pd-form-field-editor.editor.readonly .view-lines{background-color:#e9ecef;}.pd-form-field-editor.editor.readonly .margin{background-color:#e9ecef;}.pd-form-field-editor.editor.readonly .minimap canvas{background-color:#e9ecef;}.pd-form-field-editor .form-select:disabled{appearance:none;-webkit-appearance:none;-moz-appearance:none;background-image:none!important;}.pd-form-field-editor.editor.readonly .form-control:disabled{border-radius:0!important;}.pd-form-footer.pd-form-footer .pdtoolbar{flex-wrap:nowrap;padding:0;flex-shrink:0;}.pd-monacoeditor .monaco-editor-container{height:100px;}.pdpager .direction-buttons button:first-child{border-radius:.25rem 0 0 .25rem;}.pdpager .direction-buttons button:nth-child(2){border-radius:0;}.pdpager .direction-buttons button:nth-child(4){border-radius:0;}.pdpager .direction-buttons button:nth-child(5){border-radius:0 .25rem .25rem 0;}.pd-studio.pd-studio .pd-studio-editor-container .monaco-editor-container{height:100%!important;}.pd-studio.pd-studio .pd-studio-editor-container .resizable{height:100%!important;}.pdtable .pd-sort{color:var(--bs-primary);}.pdtable .pd-sort .fa-stack{width:20px;font-size:1rem;vertical-align:middle;}.pdtable .pd-sort.fa-sort{opacity:.3;}.pdtable .pd-sort i{vertical-align:middle;}.pd-column-selector.pd-column-selector .pd-dragpanel{border:none;margin:0;padding:0;background:transparent;}.pd-column-selector.pd-column-selector .pd-dragitem{background-color:transparent;border:none;margin:0;padding:.5rem 1rem;min-height:auto;transition:background-color .15s ease-in-out;cursor:pointer;display:flex;align-items:center;gap:.5rem;}.pd-column-selector.pd-column-selector .pd-dragitem:hover{background-color:var(--bs-secondary-bg,#e9ecef);}.pd-column-selector.pd-column-selector .pd-dragitem.dragging{background-color:var(--bs-primary-bg-subtle,#cfe2ff);border-color:var(--bs-primary,#0d6efd);opacity:.6;}.pd-column-selector.pd-column-selector .pd-dragitem input[type=checkbox]{width:1rem;height:1rem;cursor:pointer;flex-shrink:0;}.pd-column-selector.pd-column-selector .pd-dragitem label{margin:0;cursor:pointer;flex:1;user-select:none;color:var(--bs-body-color,#212529);}[data-bs-theme=dark] .pd-column-selector.pd-column-selector .pd-dragitem:hover{background-color:var(--bs-secondary-bg,#343a40);}[data-bs-theme=dark] .pd-column-selector.pd-column-selector .pd-dragitem label{color:var(--bs-body-color,#f8f9fa);}.pd-column-selector.pd-column-selector .pd-dragitem input[type=checkbox]:disabled,.pd-column-selector.pd-column-selector .pd-dragitem input[type=checkbox]:disabled+label{opacity:.5;cursor:not-allowed;}.pd-timeline.pd-timeline svg.disabled{background-color:#d3d3d3;filter:grayscale(1);}.pdtoolbar .pdtoolbaritem{padding:0 .25rem;align-items:center;flex-shrink:0;vertical-align:middle;white-space:nowrap;position:relative;}.pdtoolbar .pdtoolbaritem:not(.pd-hidden,.d-none){display:inline-flex!important;}.pdtoolbar .pdtoolbaritem:has(.pdtoolbartextbox){flex:1 1 200px;min-width:150px;max-width:400px;}.pdtoolbar .pdtoolbaritem:first-child{padding-left:0;}.pdtoolbar .pdtoolbaritem:last-child{padding-right:0;}.pdtoolbar .pdtoolbaritem.align-right{margin-left:auto;flex-shrink:0;}.pdtoolbar .pdtoolbaritem .btn,.pdtoolbar .pdtoolbaritem .dropdown{margin-bottom:0!important;display:inline-flex;vertical-align:middle;align-items:center;flex-shrink:0;}.pdtoolbar .pdtoolbaritem .dropdown-toggle{display:inline-flex;align-items:center;gap:var(--pd-toolbar-dropdown-gap,0);border-radius:var(--bs-border-radius,.375rem);}.pdtoolbar .pdtoolbaritem .dropdown-toggle>.icon+span{padding-left:var(--pd-toolbar-dropdown-label-gap,.25rem);}.pdtoolbar .pdtoolbaritem .dropdown-menu{position:absolute;z-index:1050;}.pdtoolbar .pdtoolbaritem .pdtoolbarbutton{border-radius:var(--bs-border-radius,.375rem);height:100%;white-space:nowrap;}.pdtoolbar .pdtoolbargroup>.pdtoolbaritem{padding:0;}.pdtoolbar .pdtoolbargroup>.pdtoolbaritem:not(:first-child) .btn{border-top-left-radius:0;border-bottom-left-radius:0;margin-left:calc(var(--bs-border-width,1px)*-1);border-left-color:var(--pd-toolbar-group-divider-color,rgba(0,0,0,.3));}.pdtoolbar .pdtoolbargroup>.pdtoolbaritem:not(:last-child) .btn{border-top-right-radius:0;border-bottom-right-radius:0;}@media (max-width:768px){.pdtoolbar .pdtoolbaritem{margin-bottom:.25rem;}.pdtoolbar .pdtoolbaritem:has(.pdtoolbartextbox){flex:1 1 100%;max-width:none;min-width:0;}}.pd-diffpanel-editor .monaco-editor-container{height:100%;}@property --pdchat-progress-seconds{syntax:"";inherits:false;initial-value:0;}@property --pdchat-progress-minutes{syntax:"";inherits:false;initial-value:0;} \ No newline at end of file +.cursor-pointer{cursor:pointer;}.fa-hidden{color:transparent;}.pd-pointer{cursor:pointer;}.pd-hidden{display:none!important;}.pd-empty-icon{height:16px;width:16px;}.resize-h{overflow:auto;resize:vertical;}.resize-w{overflow:auto;resize:horizontal;}.h-100{height:100px!important;}.h-200{height:200px!important;}.h-300{height:300px!important;}.h-400{height:400px!important;}.h-500{height:500px!important;}.h-100-pct{height:100%;}.w-100-pct{width:100%;}.w-100-px{width:100px;}.w-125-px{width:125px;}.w-150-px{width:150px;}.w-200-px{width:200px;}.mh-50-px{min-height:50px;}.mh-100-px{min-height:100px;}.mh-150-px{min-height:150px;}.mh-200-px{min-height:200px;}.mh-250-px{min-height:250px;}.mh-300-px{min-height:300px;}.mw-100-px{min-width:100px;}.mw-125-px{min-width:125px;}.mw-150-px{min-width:150px;}.mw-200-px{min-width:200px;}.text-small{font-size:.75rem;}.text-tiny{font-size:.5rem;}.z-1000{z-index:1000;}.z-1100{z-index:1100;}.z-1200{z-index:1200;}.pd-form-body .title-box{width:var(--title-width,200px)!important;min-width:var(--title-width,200px)!important;max-width:var(--title-width,200px)!important;flex:0 0 var(--title-width,200px)!important;}.pdsplitter .gutter{background-color:var(--pd-splitter-gutter-bg,var(--bs-border-color,#eee));transition:background-color .1s ease-out;}.pdsplitter .gutter-vertical{cursor:row-resize;}.pdsplitter .gutter-horizontal{cursor:col-resize;}.pd-studio .pdsplitter>.gutter{background-color:var(--pd-studio-gutter-bg,var(--pd-splitter-gutter-bg,var(--bs-tertiary-bg,#eee)));}.pdsplitter .gutter:active,.pdsplitter .gutter:hover{background-color:var(--pd-splitter-gutter-hover-bg,var(--bs-primary,#0d6efd));transition:background-color .15s ease-in var(--pd-splitter-gutter-hover-delay,.2s);}.pdsplitter .gutter:active{transition-delay:0s;}.pd-studio .pdtoolbar.pd-studio-toolbar{padding:var(--pd-studio-toolbar-padding,.375rem var(--_pds-toolbar-padding-x,0));border-bottom:var(--pd-studio-toolbar-border-bottom,1px solid var(--_pds-border-color));}.pd-studio .pdtoolbar.pd-studio-toolbar{column-gap:.75rem;}.pd-studio .pdtoolbar.pd-studio-toolbar>.pdtoolbaritem{padding-left:0;padding-right:0;}.pd-studio .pdtoolbar.pd-studio-toolbar .pdts-bar{border-left-color:var(--pd-studio-separator-color,var(--bs-secondary,#6c757d));}.pd-studio .pdtoolbarbutton.pd-studio-execute{min-width:var(--pd-studio-execute-min-width,5.5rem)}.pd-studio .pd-studio-editor-container .pd-monacoeditor{border:none;}.pdfilepreview .stacked{align-items:center;display:flex;flex-direction:column;text-align:center;}.pdfilepreview .stacked span{margin-top:4px;}.pdfilepreview .h1,.pdfilepreview .h4,.pdfilepreview h2,.pdfilepreview h3{margin:0!important;padding:0!important;}.pdchat-message .pdchat-partial blockquote,.pdchat-message .pdchat-partial h1,.pdchat-message .pdchat-partial h2,.pdchat-message .pdchat-partial h3,.pdchat-message .pdchat-partial h4,.pdchat-message .pdchat-partial h5,.pdchat-message .pdchat-partial h6,.pdchat-message .pdchat-partial li,.pdchat-message .pdchat-partial ol,.pdchat-message .pdchat-partial p,.pdchat-message .pdchat-partial table,.pdchat-message .pdchat-partial ul,.pdchat-message .pdchat-text blockquote,.pdchat-message .pdchat-text h1,.pdchat-message .pdchat-text h2,.pdchat-message .pdchat-text h3,.pdchat-message .pdchat-text h4,.pdchat-message .pdchat-text h5,.pdchat-message .pdchat-text h6,.pdchat-message .pdchat-text li,.pdchat-message .pdchat-text ol,.pdchat-message .pdchat-text p,.pdchat-message .pdchat-text table,.pdchat-message .pdchat-text ul{white-space:normal;}.pdchat-message .pdchat-partial p,.pdchat-message .pdchat-text p{margin:0 0 .5em;}.pdchat-message .pdchat-partial ol,.pdchat-message .pdchat-partial ul,.pdchat-message .pdchat-text ol,.pdchat-message .pdchat-text ul{margin:.25em 0 .5em;padding-left:1.5em;}.pdchat-message .pdchat-partial li+li,.pdchat-message .pdchat-text li+li{margin-top:.15em;}.pdchat-message .pdchat-partial li>p,.pdchat-message .pdchat-text li>p{margin:0;}.pdchat-message .pdchat-partial ol:last-child,.pdchat-message .pdchat-partial p:last-child,.pdchat-message .pdchat-partial ul:last-child,.pdchat-message .pdchat-text ol:last-child,.pdchat-message .pdchat-text p:last-child,.pdchat-message .pdchat-text ul:last-child{margin-bottom:0;}.pdchat-message .pdchat-partial table{border-collapse:collapse;font-size:.95em;}.pdchat-message .pdchat-partial td,.pdchat-message .pdchat-partial th{border:1px solid var(--pd-chat-border,#dee2e6);padding:.15rem .4rem;text-align:left;}.pdchat-container .pdchat-conversation-main .pdchat-conversation-tabset{display:flex;flex-direction:column;flex:1 1 auto;min-height:0;}.pdchat-container .pdchat-conversation-main .pdchat-conversation-tabset .pdtabset-content{flex:1 1 auto;min-height:0;display:flex;flex-direction:column;overflow:hidden;}.pdchat-container .pdchat-conversation-main .pdtabset-tab.pdchat-conversation-tab-unread::before{content:"\25CF";margin-right:4px;font-size:.625rem;line-height:1;color:var(--pd-chat-info-border,#0078d4);}.pdchat-container .pdchat-conversation-main .pdtabset-tab.pdchat-conversation-tab-unread .pdtabset-tab-title{font-weight:600;}.pdchat-container-wrapper.pdchat-container-wrapper.pdchat-split-inactive .pdchat-chat-panel{flex:0 0 0%!important;width:0!important;min-width:0!important;padding:0!important;border:none!important;overflow:hidden!important;}.pdchat-container-wrapper.pdchat-container-wrapper.pdchat-split-inactive .pdchat-content-panel{flex:1 1 100%!important;width:100%!important;}.pdchat-container-wrapper.pdchat-container-wrapper.pdchat-split-inactive .pdchat-container-splitter>.gutter{display:none!important;width:0!important;min-width:0!important;}.pdchat-container-wrapper.pdchat-container-wrapper .pdchat-container.dock-left,.pdchat-container-wrapper.pdchat-container-wrapper .pdchat-container.dock-right{position:static!important;transform:none!important;top:auto!important;left:auto!important;right:auto!important;bottom:auto!important;width:100%!important;height:100%!important;z-index:auto!important;}.pdchat-container-wrapper.pdchat-container-wrapper .pdchat-window{width:100%!important;height:100%!important;max-width:none!important;max-height:none!important;border-radius:0!important;box-shadow:none!important;}@media(max-width:767px){.pdchat-container-wrapper.pdchat-container-wrapper:not(.pdchat-split-inactive) .pdchat-chat-panel{position:fixed!important;inset:0!important;width:100%!important;height:100%!important;z-index:10000!important;}.pdchat-container-wrapper.pdchat-container-wrapper:not(.pdchat-split-inactive) .pdchat-content-panel{flex:1 1 100%!important;width:100%!important;}.pdchat-container-wrapper.pdchat-container-wrapper:not(.pdchat-split-inactive) .pdchat-container-splitter>.gutter{display:none!important;}}.pd-list .filter input{border-top-right-radius:0!important;border-bottom-right-radius:0!important;}.pd-list .filter .input-group-text{border-top-left-radius:0!important;border-bottom-left-radius:0!important;}.pdtoolbartextbox.pdtoolbartextbox input{min-width:0;width:100%;}.pdtoolbarbuttonitem .pdtoolbarbutton{white-space:nowrap;}.pdtoolbardropdown .pdtoolbarbutton{white-space:nowrap;border-radius:var(--bs-border-radius,.375rem);display:inline-flex;align-items:center;line-height:1.5;}.pdtoolbardropdown .pdtoolbarbutton.dropdown-toggle{padding:.375rem .75rem;border:1px solid var(--bs-border-color,#dee2e6);border-radius:var(--bs-border-radius,.375rem);background-color:var(--bs-body-bg,#fff);color:var(--bs-body-color,#212529);transition:all .15s ease-in-out;display:inline-flex;align-items:center;gap:.5rem;line-height:1.5;}.pdtoolbardropdown .pdtoolbarbutton.dropdown-toggle:hover{background-color:var(--bs-secondary-bg,#e9ecef);border-color:var(--bs-border-color-translucent,#adb5bd);}.pdtoolbardropdown .pdtoolbarbutton.dropdown-toggle::after{margin-left:auto;}.pdtoolbardropdown .pdtoolbarbutton.dropdown-toggle>span{display:inline-flex;align-items:center;gap:.5rem;}.pd-dropdown.pd-dropdown .dropdown-menu ul{list-style:none;padding:0;margin:0;}.pd-dropdown.pd-dropdown .dropdown-menu li{list-style:none;padding:0;margin:0;cursor:pointer;transition:background-color .15s ease-in-out;}.pd-dropdown.pd-dropdown .dropdown-menu li:hover{background-color:var(--bs-secondary-bg);}.pd-dropdown.pd-dropdown .dropdown-menu li .pd-label{display:block;padding:.5rem 1rem;color:var(--bs-body-color);text-decoration:none;white-space:nowrap;width:100%;}.pdfileexplorer.pdfileexplorer .pdtree{height:0;box-sizing:border-box;padding-top:.5rem;}.pdfileexplorer.pdfileexplorer .pdtree>.pdtreenode{padding-left:calc(.5rem - 1px);}.pdfileexplorer.pdfileexplorer .pdsplitter.horizontal{flex:1 1 0;min-height:0;}.pdfileexplorer.pdfileexplorer.pdfe-no-toolbar .pdsplitter.horizontal{height:100%;}.pdfileexplorer.pdfileexplorer .pddropzone.dz-drag-hover{background-color:unset;border-color:transparent;}.pdfileexplorer.pdfileexplorer .pdtablerow:hover td{background-color:var(--bs-tertiary-bg,rgba(128,128,128,.15));}.pdfileexplorer.pdfileexplorer .pdtablerow.selected:hover td{background-color:var(--pd-selected-bg,var(--bs-primary));}.pdfilemodalexplorer.pdfilemodalexplorer .pdfileexplorer{height:100%;padding-bottom:0;}.pdfilemodalexplorer.pdfilemodalexplorer .pdsplitter{flex-grow:1;}.pdfilemodalexplorer.pdfilemodalexplorer .pdfe-toolbar .pdtoolbar{padding-left:1rem;padding-right:1rem;}.pdfilemodalexplorer.pdfilemodalexplorer .pdtree>.pdtreenode{padding-left:calc(1rem - 1px);}.pd-filter.pd-filter .filter-icon{color:var(--bs-primary)!important;}.pd-filter.pd-filter:not(.filtered) .filter-icon{opacity:.3;}.pd-filter.pd-filter .pd-dropdown>button{border:none!important;background:unset!important;}.pd-filter .filter-toolbar .pd-button{flex:1;}.pd-form-body .pdtoggleswitch.disabled{background-color:#e9ecef;}.pd-form-body .fg-1{flex-grow:1;}.pd-form-body .fg-2{flex-grow:2;}.pd-form-body .fg-3{flex-grow:3;}.pd-form-body .fg-4{flex-grow:4;}.pd-form-body .fg-5{flex-grow:5;}.pd-form-body .fg-6{flex-grow:6;}.pd-form-body .fg-7{flex-grow:7;}.pd-form-body .fg-8{flex-grow:8;}.pd-form-body .fg-9{flex-grow:9;}.pd-form-field-editor .monaco-editor-container{display:grid;height:100%;grid-template-columns:minmax(0,auto);}.pd-form-field-editor.editor .form-control{border:none;}.pd-form-field-editor .ms-nullable{margin:0 4px 2px 12px;line-height:.5rem;vertical-align:middle;padding:0;width:16px;}.pd-form-field-editor.editor .pddatetime input{flex-grow:1;}.pd-form-field-editor.editor .pddatetimeoffset input{flex-grow:1;}.pd-form-field-editor.editor .no-resize{resize:none;}.pd-form-field-editor.editor.readonly .view-lines{background-color:#e9ecef;}.pd-form-field-editor.editor.readonly .margin{background-color:#e9ecef;}.pd-form-field-editor.editor.readonly .minimap canvas{background-color:#e9ecef;}.pd-form-field-editor .form-select:disabled{appearance:none;-webkit-appearance:none;-moz-appearance:none;background-image:none!important;}.pd-form-field-editor.editor.readonly .form-control:disabled{border-radius:0!important;}.pd-form-footer.pd-form-footer .pdtoolbar{flex-wrap:nowrap;padding:0;flex-shrink:0;}.pd-monacoeditor .monaco-editor-container{height:100px;}.pdpager .direction-buttons button:first-child{border-radius:.25rem 0 0 .25rem;}.pdpager .direction-buttons button:nth-child(2){border-radius:0;}.pdpager .direction-buttons button:nth-child(4){border-radius:0;}.pdpager .direction-buttons button:nth-child(5){border-radius:0 .25rem .25rem 0;}.pd-studio.pd-studio .pd-studio-editor-container .monaco-editor-container{height:100%!important;}.pd-studio.pd-studio .pd-studio-editor-container .resizable{height:100%!important;}.pdtable .pd-sort{color:var(--bs-primary);}.pdtable .pd-sort .fa-stack{width:20px;font-size:1rem;vertical-align:middle;}.pdtable .pd-sort.fa-sort{opacity:.3;}.pdtable .pd-sort i{vertical-align:middle;}.pd-column-selector.pd-column-selector .pd-dragpanel{border:none;margin:0;padding:0;background:transparent;}.pd-column-selector.pd-column-selector .pd-dragitem{background-color:transparent;border:none;margin:0;padding:.5rem 1rem;min-height:auto;transition:background-color .15s ease-in-out;cursor:pointer;display:flex;align-items:center;gap:.5rem;}.pd-column-selector.pd-column-selector .pd-dragitem:hover{background-color:var(--bs-secondary-bg,#e9ecef);}.pd-column-selector.pd-column-selector .pd-dragitem.dragging{background-color:var(--bs-primary-bg-subtle,#cfe2ff);border-color:var(--bs-primary,#0d6efd);opacity:.6;}.pd-column-selector.pd-column-selector .pd-dragitem input[type=checkbox]{width:1rem;height:1rem;cursor:pointer;flex-shrink:0;}.pd-column-selector.pd-column-selector .pd-dragitem label{margin:0;cursor:pointer;flex:1;user-select:none;color:var(--bs-body-color,#212529);}[data-bs-theme=dark] .pd-column-selector.pd-column-selector .pd-dragitem:hover{background-color:var(--bs-secondary-bg,#343a40);}[data-bs-theme=dark] .pd-column-selector.pd-column-selector .pd-dragitem label{color:var(--bs-body-color,#f8f9fa);}.pd-column-selector.pd-column-selector .pd-dragitem input[type=checkbox]:disabled,.pd-column-selector.pd-column-selector .pd-dragitem input[type=checkbox]:disabled+label{opacity:.5;cursor:not-allowed;}.pd-timeline.pd-timeline svg.disabled{background-color:#d3d3d3;filter:grayscale(1);}.pdtoolbar .pdtoolbaritem{padding:0 .25rem;align-items:center;flex-shrink:0;vertical-align:middle;white-space:nowrap;position:relative;}.pdtoolbar .pdtoolbaritem:not(.pd-hidden,.d-none){display:inline-flex!important;}.pdtoolbar .pdtoolbaritem:has(.pdtoolbartextbox){flex:1 1 200px;min-width:150px;max-width:400px;}.pdtoolbar .pdtoolbaritem:first-child{padding-left:0;}.pdtoolbar .pdtoolbaritem.pd-hidden:first-child+.pdtoolbaritem,.pdtoolbar .pdtoolbaritem.d-none:first-child+.pdtoolbaritem{padding-left:0;}.pdtoolbar .pdtoolbaritem:last-child{padding-right:0;}.pdtoolbar .pdtoolbaritem.align-right{margin-left:auto;flex-shrink:0;}.pdtoolbar .pdtoolbaritem .btn,.pdtoolbar .pdtoolbaritem .dropdown{margin-bottom:0!important;display:inline-flex;vertical-align:middle;align-items:center;flex-shrink:0;}.pdtoolbar .pdtoolbaritem .dropdown-toggle{display:inline-flex;align-items:center;gap:var(--pd-toolbar-dropdown-gap,0);border-radius:var(--bs-border-radius,.375rem);}.pdtoolbar .pdtoolbaritem .dropdown-toggle>.icon+span{padding-left:var(--pd-toolbar-dropdown-label-gap,.25rem);}.pdtoolbar .pdtoolbaritem .dropdown-menu{position:absolute;z-index:1050;}.pdtoolbar .pdtoolbaritem .pdtoolbarbutton{border-radius:var(--bs-border-radius,.375rem);height:100%;white-space:nowrap;}.pdtoolbar .pdtoolbargroup>.pdtoolbaritem{padding:0;}.pdtoolbar .pdtoolbargroup>.pdtoolbaritem:not(:first-child) .btn{border-top-left-radius:0;border-bottom-left-radius:0;margin-left:calc(var(--bs-border-width,1px)*-1);border-left-color:var(--pd-toolbar-group-divider-color,rgba(0,0,0,.3));}.pdtoolbar .pdtoolbargroup>.pdtoolbaritem:not(:last-child) .btn{border-top-right-radius:0;border-bottom-right-radius:0;}@media (max-width:768px){.pdtoolbar .pdtoolbaritem{margin-bottom:.25rem;}.pdtoolbar .pdtoolbaritem:has(.pdtoolbartextbox){flex:1 1 100%;max-width:none;min-width:0;}}.pd-diffpanel-editor .monaco-editor-container{height:100%;}@property --pdchat-progress-seconds{syntax:"";inherits:false;initial-value:0;}@property --pdchat-progress-minutes{syntax:"";inherits:false;initial-value:0;} \ No newline at end of file diff --git a/PanoramicData.Blazor/wwwroot/css/main.scss b/PanoramicData.Blazor/wwwroot/css/main.scss index 48487f9bc..979f73f3f 100644 --- a/PanoramicData.Blazor/wwwroot/css/main.scss +++ b/PanoramicData.Blazor/wwwroot/css/main.scss @@ -157,7 +157,7 @@ /* PDSplitter - the gutters are created by split.js */ .pdsplitter .gutter { - background-color: var(--pd-splitter-gutter-bg, #eee); + background-color: var(--pd-splitter-gutter-bg, var(--bs-border-color, #eee)); transition: background-color 0.1s ease-out; } @@ -529,12 +529,22 @@ } /* PDFileExplorer */ +/* The top folder sits a little below whatever is above the tree, rather than against it */ .pdfileexplorer.pdfileexplorer .pdtree { height: 0; + box-sizing: border-box; + padding-top: 0.5rem; } +/* The top folder lines up with the toolbar's first button: the toolbar's padding, less the drop zone's 1px border */ +.pdfileexplorer.pdfileexplorer .pdtree > .pdtreenode { + padding-left: calc(0.5rem - 1px); +} + +/* The splitter takes the height the toolbar leaves */ .pdfileexplorer.pdfileexplorer .pdsplitter.horizontal { - height: calc(100% - 50px); + flex: 1 1 0; + min-height: 0; } .pdfileexplorer.pdfileexplorer.pdfe-no-toolbar .pdsplitter.horizontal { @@ -557,14 +567,26 @@ } /* PDFileModal */ +/* The dialog's body has no padding (p-0), so the toolbar's own spacing is the only spacing and the panes run edge to edge */ .pdfilemodalexplorer.pdfilemodalexplorer .pdfileexplorer { height: 100%; + padding-bottom: 0; } .pdfilemodalexplorer.pdfilemodalexplorer .pdsplitter { flex-grow: 1; } +/* In the dialog the toolbar's buttons and the top folder line up with the title and the footer's buttons, 1rem in */ +.pdfilemodalexplorer.pdfilemodalexplorer .pdfe-toolbar .pdtoolbar { + padding-left: 1rem; + padding-right: 1rem; +} + +.pdfilemodalexplorer.pdfilemodalexplorer .pdtree > .pdtreenode { + padding-left: calc(1rem - 1px); +} + /* PDFilter */ .pd-filter.pd-filter .filter-icon { color: var(--bs-primary) !important; @@ -844,6 +866,12 @@ padding-left: 0; } +/* A hidden first item, such as an Up button turned off, must not leave the next one indented */ +.pdtoolbar .pdtoolbaritem.pd-hidden:first-child + .pdtoolbaritem, +.pdtoolbar .pdtoolbaritem.d-none:first-child + .pdtoolbaritem { + padding-left: 0; +} + .pdtoolbar .pdtoolbaritem:last-child { padding-right: 0; }