├── .Rbuildignore ├── .Rinstignore ├── .browserslistrc ├── .eslintrc.yml ├── .gitattributes ├── .github ├── CONTRIBUTING.md ├── ISSUE_TEMPLATE │ ├── bug_report.md │ ├── feature_request.md │ └── question.md ├── shiny-workflows │ └── routine.sh └── workflows │ └── R-CMD-check.yaml ├── .gitignore ├── .madgerc ├── .vscode ├── extensions.json └── settings.json ├── .yarn ├── plugins │ └── @yarnpkg │ │ ├── plugin-interactive-tools.cjs │ │ └── plugin-outdated.cjs └── releases │ └── yarn-3.2.3.cjs ├── .yarnrc.yml ├── DESCRIPTION ├── LICENSE ├── NAMESPACE ├── NEWS.md ├── R ├── app-state.R ├── app_template.R ├── bind-cache.R ├── bind-event.R ├── bookmark-state-local.R ├── bookmark-state.R ├── bootstrap-deprecated.R ├── bootstrap-layout.R ├── bootstrap.R ├── busy-indicators-spinners.R ├── busy-indicators.R ├── cache-utils.R ├── conditions.R ├── deprecated.R ├── devmode.R ├── diagnose.R ├── extended-task.R ├── fileupload.R ├── globals.R ├── graph.R ├── history.R ├── hooks.R ├── html-deps.R ├── image-interact-opts.R ├── image-interact.R ├── imageutils.R ├── input-action.R ├── input-checkbox.R ├── input-checkboxgroup.R ├── input-date.R ├── input-daterange.R ├── input-file.R ├── input-numeric.R ├── input-password.R ├── input-radiobuttons.R ├── input-select.R ├── input-slider.R ├── input-submit.R ├── input-text.R ├── input-textarea.R ├── input-utils.R ├── insert-tab.R ├── insert-ui.R ├── jqueryui.R ├── knitr.R ├── map.R ├── middleware-shiny.R ├── middleware.R ├── mock-session.R ├── modal.R ├── modules.R ├── notifications.R ├── priorityqueue.R ├── progress.R ├── react.R ├── reactive-domains.R ├── reactives.R ├── reexports.R ├── render-cached-plot.R ├── render-plot.R ├── render-table.R ├── run-url.R ├── runapp.R ├── serializers.R ├── server-input-handlers.R ├── server-resource-paths.R ├── server.R ├── shiny-options.R ├── shiny-package.R ├── shiny.R ├── shinyapp.R ├── shinyui.R ├── shinywrappers.R ├── showcase.R ├── snapshot.R ├── staticimports.R ├── tar.R ├── test-export.R ├── test-server.R ├── test.R ├── timer.R ├── update-input.R ├── utils-lang.R ├── utils.R ├── version_bs_date_picker.R ├── version_ion_range_slider.R ├── version_jquery.R ├── version_jqueryui.R ├── version_selectize.R ├── version_strftime.R └── viewer.R ├── README.md ├── TODO-promises.md ├── cran-comments.md ├── inst ├── app_template │ ├── R │ │ ├── example-module.R │ │ └── example.R │ ├── app.R │ └── tests │ │ ├── testthat.R │ │ └── testthat │ │ ├── setup-shinytest2.R │ │ ├── test-examplemodule.R │ │ ├── test-server.R │ │ ├── test-shinytest2.R │ │ └── test-sort.R ├── diagrams │ ├── outputProgressStateMachine.drawio │ └── outputProgressStateMachine.svg ├── examples-shiny │ ├── 01_hello │ │ ├── DESCRIPTION │ │ ├── Readme.md │ │ └── app.R │ ├── 02_text │ │ ├── DESCRIPTION │ │ ├── Readme.md │ │ └── app.R │ ├── 03_reactivity │ │ ├── DESCRIPTION │ │ ├── Readme.md │ │ └── app.R │ ├── 04_mpg │ │ ├── DESCRIPTION │ │ ├── Readme.md │ │ └── app.R │ ├── 05_sliders │ │ ├── DESCRIPTION │ │ ├── Readme.md │ │ └── app.R │ ├── 06_tabsets │ │ ├── DESCRIPTION │ │ ├── Readme.md │ │ └── app.R │ ├── 07_widgets │ │ ├── DESCRIPTION │ │ ├── Readme.md │ │ └── app.R │ ├── 08_html │ │ ├── DESCRIPTION │ │ ├── Readme.md │ │ ├── app.R │ │ └── www │ │ │ └── index.html │ ├── 09_upload │ │ ├── DESCRIPTION │ │ ├── Readme.md │ │ └── app.R │ ├── 10_download │ │ ├── DESCRIPTION │ │ ├── Readme.md │ │ └── app.R │ └── 11_timer │ │ ├── DESCRIPTION │ │ ├── Readme.md │ │ └── app.R ├── examples │ ├── 01_hello │ │ ├── DESCRIPTION │ │ ├── Readme.md │ │ └── app.R │ ├── 02_text │ │ ├── DESCRIPTION │ │ ├── Readme.md │ │ └── app.R │ ├── 03_reactivity │ │ ├── DESCRIPTION │ │ ├── Readme.md │ │ └── app.R │ ├── 04_mpg │ │ ├── DESCRIPTION │ │ ├── Readme.md │ │ └── app.R │ ├── 05_sliders │ │ ├── DESCRIPTION │ │ ├── Readme.md │ │ └── app.R │ ├── 06_tabsets │ │ ├── DESCRIPTION │ │ ├── Readme.md │ │ └── app.R │ ├── 07_widgets │ │ ├── DESCRIPTION │ │ ├── Readme.md │ │ └── app.R │ ├── 09_upload │ │ ├── DESCRIPTION │ │ ├── Readme.md │ │ └── app.R │ ├── 10_download │ │ ├── DESCRIPTION │ │ ├── Readme.md │ │ └── app.R │ └── 11_timer │ │ ├── DESCRIPTION │ │ ├── Readme.md │ │ └── app.R ├── template │ ├── default.html │ └── error.html ├── www-dir │ └── index.html └── www │ └── shared │ ├── bootstrap │ ├── accessibility │ │ ├── css │ │ │ └── bootstrap-accessibility.min.css │ │ └── js │ │ │ └── bootstrap-accessibility.min.js │ ├── css │ │ ├── bootstrap-theme.css │ │ ├── bootstrap-theme.css.map │ │ ├── bootstrap-theme.min.css │ │ ├── bootstrap-theme.min.css.map │ │ ├── bootstrap.css │ │ ├── bootstrap.css.map │ │ ├── bootstrap.min.css │ │ └── bootstrap.min.css.map │ ├── fonts │ │ ├── glyphicons-halflings-regular.eot │ │ ├── glyphicons-halflings-regular.svg │ │ ├── glyphicons-halflings-regular.ttf │ │ ├── glyphicons-halflings-regular.woff │ │ └── glyphicons-halflings-regular.woff2 │ └── js │ │ ├── bootstrap.js │ │ ├── bootstrap.min.js │ │ └── npm.js │ ├── busy-indicators │ ├── busy-indicators.css │ └── spinners │ │ ├── LICENSE │ │ ├── bars.svg │ │ ├── bars2.svg │ │ ├── bars3.svg │ │ ├── dots.svg │ │ ├── dots2.svg │ │ ├── dots3.svg │ │ ├── pulse.svg │ │ ├── pulse2.svg │ │ ├── pulse3.svg │ │ ├── ring.svg │ │ ├── ring2.svg │ │ └── ring3.svg │ ├── datatables │ ├── css │ │ └── dataTables.bootstrap.css │ ├── images │ │ ├── sort_asc.png │ │ ├── sort_asc_disabled.png │ │ ├── sort_both.png │ │ ├── sort_desc.png │ │ └── sort_desc_disabled.png │ ├── js │ │ ├── dataTables.bootstrap.js │ │ └── jquery.dataTables.min.js │ └── upgrade1.10.txt │ ├── datepicker │ ├── css │ │ ├── bootstrap-datepicker3.css │ │ └── bootstrap-datepicker3.min.css │ ├── js │ │ ├── bootstrap-datepicker.js │ │ ├── bootstrap-datepicker.min.js │ │ └── locales │ │ │ ├── bootstrap-datepicker-en-CA.min.js │ │ │ ├── bootstrap-datepicker.ar-tn.min.js │ │ │ ├── bootstrap-datepicker.ar.min.js │ │ │ ├── bootstrap-datepicker.az.min.js │ │ │ ├── bootstrap-datepicker.bg.min.js │ │ │ ├── bootstrap-datepicker.bm.min.js │ │ │ ├── bootstrap-datepicker.bn.min.js │ │ │ ├── bootstrap-datepicker.br.min.js │ │ │ ├── bootstrap-datepicker.bs.min.js │ │ │ ├── bootstrap-datepicker.ca.min.js │ │ │ ├── bootstrap-datepicker.cs.min.js │ │ │ ├── bootstrap-datepicker.cy.min.js │ │ │ ├── bootstrap-datepicker.da.min.js │ │ │ ├── bootstrap-datepicker.de.min.js │ │ │ ├── bootstrap-datepicker.el.min.js │ │ │ ├── bootstrap-datepicker.en-AU.min.js │ │ │ ├── bootstrap-datepicker.en-CA.min.js │ │ │ ├── bootstrap-datepicker.en-GB.min.js │ │ │ ├── bootstrap-datepicker.en-IE.min.js │ │ │ ├── bootstrap-datepicker.en-NZ.min.js │ │ │ ├── bootstrap-datepicker.en-ZA.min.js │ │ │ ├── bootstrap-datepicker.eo.min.js │ │ │ ├── bootstrap-datepicker.es.min.js │ │ │ ├── bootstrap-datepicker.et.min.js │ │ │ ├── bootstrap-datepicker.eu.min.js │ │ │ ├── bootstrap-datepicker.fa.min.js │ │ │ ├── bootstrap-datepicker.fi.min.js │ │ │ ├── bootstrap-datepicker.fo.min.js │ │ │ ├── bootstrap-datepicker.fr-CH.min.js │ │ │ ├── bootstrap-datepicker.fr.min.js │ │ │ ├── bootstrap-datepicker.gl.min.js │ │ │ ├── bootstrap-datepicker.he.min.js │ │ │ ├── bootstrap-datepicker.hi.min.js │ │ │ ├── bootstrap-datepicker.hr.min.js │ │ │ ├── bootstrap-datepicker.hu.min.js │ │ │ ├── bootstrap-datepicker.hy.min.js │ │ │ ├── bootstrap-datepicker.id.min.js │ │ │ ├── bootstrap-datepicker.is.min.js │ │ │ ├── bootstrap-datepicker.it-CH.min.js │ │ │ ├── bootstrap-datepicker.it.min.js │ │ │ ├── bootstrap-datepicker.ja.min.js │ │ │ ├── bootstrap-datepicker.ka.min.js │ │ │ ├── bootstrap-datepicker.kh.min.js │ │ │ ├── bootstrap-datepicker.kk.min.js │ │ │ ├── bootstrap-datepicker.km.min.js │ │ │ ├── bootstrap-datepicker.ko.min.js │ │ │ ├── bootstrap-datepicker.kr.min.js │ │ │ ├── bootstrap-datepicker.lt.min.js │ │ │ ├── bootstrap-datepicker.lv.min.js │ │ │ ├── bootstrap-datepicker.me.min.js │ │ │ ├── bootstrap-datepicker.mk.min.js │ │ │ ├── bootstrap-datepicker.mn.min.js │ │ │ ├── bootstrap-datepicker.ms.min.js │ │ │ ├── bootstrap-datepicker.nl-BE.min.js │ │ │ ├── bootstrap-datepicker.nl.min.js │ │ │ ├── bootstrap-datepicker.no.min.js │ │ │ ├── bootstrap-datepicker.oc.min.js │ │ │ ├── bootstrap-datepicker.pl.min.js │ │ │ ├── bootstrap-datepicker.pt-BR.min.js │ │ │ ├── bootstrap-datepicker.pt.min.js │ │ │ ├── bootstrap-datepicker.ro.min.js │ │ │ ├── bootstrap-datepicker.rs-latin.min.js │ │ │ ├── bootstrap-datepicker.rs.min.js │ │ │ ├── bootstrap-datepicker.ru.min.js │ │ │ ├── bootstrap-datepicker.si.min.js │ │ │ ├── bootstrap-datepicker.sk.min.js │ │ │ ├── bootstrap-datepicker.sl.min.js │ │ │ ├── bootstrap-datepicker.sq.min.js │ │ │ ├── bootstrap-datepicker.sr-latin.min.js │ │ │ ├── bootstrap-datepicker.sr.min.js │ │ │ ├── bootstrap-datepicker.sv.min.js │ │ │ ├── bootstrap-datepicker.sw.min.js │ │ │ ├── bootstrap-datepicker.ta.min.js │ │ │ ├── bootstrap-datepicker.tg.min.js │ │ │ ├── bootstrap-datepicker.th.min.js │ │ │ ├── bootstrap-datepicker.tk.min.js │ │ │ ├── bootstrap-datepicker.tr.min.js │ │ │ ├── bootstrap-datepicker.uk.min.js │ │ │ ├── bootstrap-datepicker.uz-cyrl.min.js │ │ │ ├── bootstrap-datepicker.uz-latn.min.js │ │ │ ├── bootstrap-datepicker.vi.min.js │ │ │ ├── bootstrap-datepicker.zh-CN.min.js │ │ │ └── bootstrap-datepicker.zh-TW.min.js │ └── scss │ │ ├── build3.scss │ │ └── datepicker3.scss │ ├── highlight │ ├── LICENSE │ ├── classref.txt │ ├── highlight.pack.js │ └── rstudio.css │ ├── ionrangeslider │ ├── css │ │ └── ion.rangeSlider.css │ ├── js │ │ ├── ion.rangeSlider.js │ │ └── ion.rangeSlider.min.js │ └── scss │ │ ├── _base.scss │ │ ├── _mixins.scss │ │ └── shiny.scss │ ├── jquery-AUTHORS.txt │ ├── jquery.js │ ├── jquery.min.js │ ├── jquery.min.js.map │ ├── jqueryui │ ├── AUTHORS.txt │ ├── LICENSE.txt │ ├── images │ │ ├── ui-icons_444444_256x240.png │ │ ├── ui-icons_555555_256x240.png │ │ ├── ui-icons_777620_256x240.png │ │ ├── ui-icons_777777_256x240.png │ │ ├── ui-icons_cc0000_256x240.png │ │ └── ui-icons_ffffff_256x240.png │ ├── index.html │ ├── jquery-ui.css │ ├── jquery-ui.js │ ├── jquery-ui.min.css │ ├── jquery-ui.min.js │ ├── jquery-ui.structure.css │ ├── jquery-ui.structure.min.css │ ├── jquery-ui.theme.css │ └── jquery-ui.theme.min.css │ ├── legacy │ ├── jquery-AUTHORS.txt │ ├── jquery.js │ ├── jquery.min.js │ └── jquery.min.map │ ├── selectize │ ├── accessibility │ │ └── js │ │ │ ├── selectize-plugin-a11y.js │ │ │ └── selectize-plugin-a11y.min.js │ ├── css │ │ └── selectize.bootstrap3.css │ ├── js │ │ ├── selectize.js │ │ └── selectize.min.js │ └── scss │ │ ├── plugins │ │ ├── auto_position.scss │ │ ├── clear_button.scss │ │ ├── drag_drop.scss │ │ ├── dropdown_header.scss │ │ ├── optgroup_columns.scss │ │ └── remove_button.scss │ │ ├── selectize.bootstrap3.scss │ │ ├── selectize.bootstrap4.scss │ │ ├── selectize.bootstrap5.scss │ │ ├── selectize.default.scss │ │ └── selectize.scss │ ├── shiny-autoreload.js │ ├── shiny-autoreload.js.map │ ├── shiny-showcase.css │ ├── shiny-showcase.js │ ├── shiny-showcase.js.map │ ├── shiny-testmode.js │ ├── shiny-testmode.js.map │ ├── shiny.js │ ├── shiny.js.map │ ├── shiny.min.css │ ├── shiny.min.js │ ├── shiny.min.js.map │ ├── shiny_scss │ ├── shiny.bootstrap3.scss │ ├── shiny.bootstrap4.scss │ ├── shiny.bootstrap5.scss │ └── shiny.scss │ ├── showdown │ ├── compressed │ │ └── showdown.js │ ├── license.txt │ └── src │ │ └── showdown.js │ └── strftime │ └── strftime-min.js ├── jest.config.js ├── man-roxygen ├── param-env.R ├── param-quoted.R └── update-input.R ├── man ├── ExtendedTask.Rd ├── MockShinySession.Rd ├── NS.Rd ├── Progress.Rd ├── absolutePanel.Rd ├── actionButton.Rd ├── applyInputHandlers.Rd ├── bindCache.Rd ├── bindEvent.Rd ├── bookmarkButton.Rd ├── bootstrapLib.Rd ├── bootstrapPage.Rd ├── brushOpts.Rd ├── brushedPoints.Rd ├── busyIndicatorOptions.Rd ├── callModule.Rd ├── checkboxGroupInput.Rd ├── checkboxInput.Rd ├── clickOpts.Rd ├── column.Rd ├── conditionalPanel.Rd ├── createRenderFunction.Rd ├── createWebDependency.Rd ├── dateInput.Rd ├── dateRangeInput.Rd ├── debounce.Rd ├── devmode.Rd ├── diskCache.Rd ├── domains.Rd ├── downloadButton.Rd ├── downloadHandler.Rd ├── enableBookmarking.Rd ├── exportTestValues.Rd ├── exprToFunction.Rd ├── figures │ ├── lifecycle-archived.svg │ ├── lifecycle-defunct.svg │ ├── lifecycle-deprecated.svg │ ├── lifecycle-experimental.svg │ ├── lifecycle-maturing.svg │ ├── lifecycle-questioning.svg │ ├── lifecycle-soft-deprecated.svg │ ├── lifecycle-stable.svg │ ├── lifecycle-superseded.svg │ └── logo.png ├── fileInput.Rd ├── fillPage.Rd ├── fillRow.Rd ├── fixedPage.Rd ├── flowLayout.Rd ├── fluidPage.Rd ├── freezeReactiveValue.Rd ├── getCurrentOutputInfo.Rd ├── getCurrentTheme.Rd ├── getQueryString.Rd ├── headerPanel.Rd ├── helpText.Rd ├── htmlOutput.Rd ├── httpResponse.Rd ├── icon.Rd ├── inputPanel.Rd ├── insertTab.Rd ├── insertUI.Rd ├── invalidateLater.Rd ├── is.reactivevalues.Rd ├── isRunning.Rd ├── isTruthy.Rd ├── isolate.Rd ├── knitr_methods.Rd ├── loadSupport.Rd ├── makeReactiveBinding.Rd ├── markOutputAttrs.Rd ├── markRenderFunction.Rd ├── markdown.Rd ├── maskReactiveContext.Rd ├── memoryCache.Rd ├── modalDialog.Rd ├── moduleServer.Rd ├── navbarPage.Rd ├── navlistPanel.Rd ├── numericInput.Rd ├── observe.Rd ├── observeEvent.Rd ├── onBookmark.Rd ├── onFlush.Rd ├── onStop.Rd ├── outputOptions.Rd ├── pageWithSidebar.Rd ├── parseQueryString.Rd ├── passwordInput.Rd ├── plotOutput.Rd ├── plotPNG.Rd ├── radioButtons.Rd ├── reactive.Rd ├── reactiveConsole.Rd ├── reactiveFileReader.Rd ├── reactivePoll.Rd ├── reactiveTimer.Rd ├── reactiveVal.Rd ├── reactiveValues.Rd ├── reactiveValuesToList.Rd ├── reactlog.Rd ├── reexports.Rd ├── registerInputHandler.Rd ├── registerThemeDependency.Rd ├── removeInputHandler.Rd ├── renderCachedPlot.Rd ├── renderDataTable.Rd ├── renderImage.Rd ├── renderPlot.Rd ├── renderPrint.Rd ├── renderTable.Rd ├── renderUI.Rd ├── repeatable.Rd ├── req.Rd ├── resourcePaths.Rd ├── restoreInput.Rd ├── runApp.Rd ├── runExample.Rd ├── runGadget.Rd ├── runTests.Rd ├── runUrl.Rd ├── safeError.Rd ├── selectInput.Rd ├── serverInfo.Rd ├── session.Rd ├── setBookmarkExclude.Rd ├── setSerializer.Rd ├── shiny-package.Rd ├── shiny.appobj.Rd ├── shinyApp.Rd ├── shinyAppTemplate.Rd ├── shinyDeprecated.Rd ├── shinyOptions.Rd ├── shinyServer.Rd ├── shinyUI.Rd ├── showBookmarkUrlModal.Rd ├── showModal.Rd ├── showNotification.Rd ├── showTab.Rd ├── sidebarLayout.Rd ├── sizeGrowthRatio.Rd ├── sliderInput.Rd ├── snapshotExclude.Rd ├── snapshotPreprocessInput.Rd ├── snapshotPreprocessOutput.Rd ├── splitLayout.Rd ├── stacktrace.Rd ├── stopApp.Rd ├── submitButton.Rd ├── tabPanel.Rd ├── tabsetPanel.Rd ├── testServer.Rd ├── textAreaInput.Rd ├── textInput.Rd ├── textOutput.Rd ├── titlePanel.Rd ├── updateActionButton.Rd ├── updateCheckboxGroupInput.Rd ├── updateCheckboxInput.Rd ├── updateDateInput.Rd ├── updateDateRangeInput.Rd ├── updateNumericInput.Rd ├── updateQueryString.Rd ├── updateRadioButtons.Rd ├── updateSelectInput.Rd ├── updateSliderInput.Rd ├── updateTabsetPanel.Rd ├── updateTextAreaInput.Rd ├── updateTextInput.Rd ├── urlModal.Rd ├── useBusyIndicators.Rd ├── validate.Rd ├── varSelectInput.Rd ├── verticalLayout.Rd ├── viewer.Rd ├── wellPanel.Rd ├── withMathJax.Rd └── withProgress.Rd ├── package.json ├── res └── text-example.R ├── revdep ├── .gitignore ├── README.md ├── cran.md ├── problems.md └── revdep_cran.md ├── shiny.Rproj ├── smoketests ├── .gitignore ├── README.md ├── functions.R ├── snapshot.R ├── stacktrace1 │ ├── R.out.save │ └── app.R ├── stacktrace2 │ ├── R.out.save │ └── app.R ├── stacktrace3 │ ├── R.out.save │ └── app.R ├── stacktrace4 │ ├── R.out.save │ └── app.R ├── stacktrace5 │ ├── R.out.save │ ├── server.R │ └── ui.R ├── stacktrace6 │ ├── R.out.save │ ├── server.R │ └── ui.R ├── test.R └── visit.js ├── srcts ├── README.md ├── build │ ├── _build.ts │ ├── _jquery.ts │ ├── external_libs.ts │ ├── external_libs_tsconfig.json │ ├── extras.ts │ └── shiny.ts ├── extras │ ├── busy-indicators │ │ └── busy-indicators.scss │ ├── globalShiny.ts │ ├── shiny-autoreload.ts │ ├── shiny-showcase.scss │ ├── shiny-showcase.ts │ └── shiny-testmode.ts ├── src │ ├── bindings │ │ ├── index.ts │ │ ├── input │ │ │ ├── actionbutton.ts │ │ │ ├── checkbox.ts │ │ │ ├── checkboxgroup.ts │ │ │ ├── date.ts │ │ │ ├── daterange.ts │ │ │ ├── fileinput.ts │ │ │ ├── index.ts │ │ │ ├── inputBinding.ts │ │ │ ├── number.ts │ │ │ ├── password.ts │ │ │ ├── radio.ts │ │ │ ├── selectInput.ts │ │ │ ├── slider.ts │ │ │ ├── tabinput.ts │ │ │ ├── text.ts │ │ │ └── textarea.ts │ │ ├── output │ │ │ ├── datatable.ts │ │ │ ├── downloadlink.ts │ │ │ ├── html.ts │ │ │ ├── image.ts │ │ │ ├── index.ts │ │ │ ├── outputBinding.ts │ │ │ └── text.ts │ │ ├── outputAdapter.ts │ │ └── registry.ts │ ├── components │ │ └── errorConsole.ts │ ├── events │ │ ├── inputChanged.ts │ │ ├── jQueryEvents.ts │ │ └── shinyEvents.ts │ ├── file │ │ └── fileProcessor.ts │ ├── imageutils │ │ ├── createBrush.ts │ │ ├── createClickInfo.ts │ │ ├── createHandlers.ts │ │ ├── disableDrag.ts │ │ ├── findbox.ts │ │ ├── index.ts │ │ ├── initCoordmap.ts │ │ ├── initPanelScales.ts │ │ ├── resetBrush.ts │ │ └── shiftToRange.ts │ ├── index.ts │ ├── initialize │ │ ├── browser.ts │ │ ├── disableForm.ts │ │ ├── history.ts │ │ └── index.ts │ ├── inputPolicies │ │ ├── index.ts │ │ ├── inputBatchSender.ts │ │ ├── inputDeferDecorator.ts │ │ ├── inputEventDecorator.ts │ │ ├── inputNoResendDecorator.ts │ │ ├── inputPolicy.ts │ │ ├── inputRateDecorator.ts │ │ ├── inputRatePolicy.ts │ │ ├── inputValidateDecorator.ts │ │ └── splitInputNameType.ts │ ├── shiny │ │ ├── bind.ts │ │ ├── error.ts │ │ ├── index.ts │ │ ├── initedMethods.ts │ │ ├── modal.ts │ │ ├── notifications.ts │ │ ├── outputProgress.ts │ │ ├── reactlog.ts │ │ ├── reconnectDialog.ts │ │ ├── render.ts │ │ ├── sendImageSize.ts │ │ ├── shinyapp.ts │ │ └── singletons.ts │ ├── testing │ │ ├── extendJQuery.d.ts │ │ └── extendJQuery.ts │ ├── time │ │ ├── debounce.ts │ │ ├── index.ts │ │ ├── invoke.ts │ │ └── throttle.ts │ ├── utils │ │ ├── __tests__ │ │ │ ├── jqueryExample.test.ts │ │ │ └── utils.test.ts │ │ ├── asyncQueue.ts │ │ ├── browser.ts │ │ ├── eval.ts │ │ ├── extraTypes.ts │ │ ├── index.ts │ │ ├── object.ts │ │ ├── promise.ts │ │ └── userAgent.ts │ └── window │ │ ├── pixelRatio.ts │ │ └── userAgent.ts └── types │ ├── extras │ └── globalShiny.d.ts │ └── src │ ├── bindings │ ├── index.d.ts │ ├── input │ │ ├── actionbutton.d.ts │ │ ├── checkbox.d.ts │ │ ├── checkboxgroup.d.ts │ │ ├── date.d.ts │ │ ├── daterange.d.ts │ │ ├── fileinput.d.ts │ │ ├── index.d.ts │ │ ├── inputBinding.d.ts │ │ ├── number.d.ts │ │ ├── password.d.ts │ │ ├── radio.d.ts │ │ ├── selectInput.d.ts │ │ ├── slider.d.ts │ │ ├── tabinput.d.ts │ │ ├── text.d.ts │ │ └── textarea.d.ts │ ├── output │ │ ├── datatable.d.ts │ │ ├── downloadlink.d.ts │ │ ├── html.d.ts │ │ ├── image.d.ts │ │ ├── index.d.ts │ │ ├── outputBinding.d.ts │ │ └── text.d.ts │ ├── outputAdapter.d.ts │ └── registry.d.ts │ ├── components │ └── errorConsole.d.ts │ ├── events │ ├── inputChanged.d.ts │ ├── jQueryEvents.d.ts │ └── shinyEvents.d.ts │ ├── file │ └── fileProcessor.d.ts │ ├── imageutils │ ├── createBrush.d.ts │ ├── createClickInfo.d.ts │ ├── createHandlers.d.ts │ ├── disableDrag.d.ts │ ├── findbox.d.ts │ ├── index.d.ts │ ├── initCoordmap.d.ts │ ├── initPanelScales.d.ts │ ├── resetBrush.d.ts │ └── shiftToRange.d.ts │ ├── index.d.ts │ ├── initialize │ ├── browser.d.ts │ ├── disableForm.d.ts │ ├── history.d.ts │ └── index.d.ts │ ├── inputPolicies │ ├── index.d.ts │ ├── inputBatchSender.d.ts │ ├── inputDeferDecorator.d.ts │ ├── inputEventDecorator.d.ts │ ├── inputNoResendDecorator.d.ts │ ├── inputPolicy.d.ts │ ├── inputRateDecorator.d.ts │ ├── inputRatePolicy.d.ts │ ├── inputValidateDecorator.d.ts │ └── splitInputNameType.d.ts │ ├── shiny │ ├── bind.d.ts │ ├── error.d.ts │ ├── index.d.ts │ ├── initedMethods.d.ts │ ├── modal.d.ts │ ├── notifications.d.ts │ ├── outputProgress.d.ts │ ├── reactlog.d.ts │ ├── reconnectDialog.d.ts │ ├── render.d.ts │ ├── sendImageSize.d.ts │ ├── shinyapp.d.ts │ └── singletons.d.ts │ ├── testing │ └── extendJQuery.d.ts │ ├── time │ ├── debounce.d.ts │ ├── index.d.ts │ ├── invoke.d.ts │ └── throttle.d.ts │ ├── utils │ ├── asyncQueue.d.ts │ ├── browser.d.ts │ ├── eval.d.ts │ ├── extraTypes.d.ts │ ├── index.d.ts │ ├── object.d.ts │ ├── promise.d.ts │ └── userAgent.d.ts │ └── window │ ├── pixelRatio.d.ts │ └── userAgent.d.ts ├── tests ├── test-encoding │ ├── 01-symbols │ │ └── app.R │ ├── 02-backslash │ │ ├── server.R │ │ └── ui.R │ └── test-all.R ├── test-helpers │ ├── app1-standard │ │ ├── R │ │ │ ├── helperCap.R │ │ │ └── helperLower.r │ │ ├── global.R │ │ ├── server.R │ │ ├── tests │ │ │ ├── runner1.R │ │ │ └── runner2.R │ │ └── ui.R │ ├── app2-nested │ │ ├── R │ │ │ ├── helper.R │ │ │ └── nested │ │ │ │ └── helper.R │ │ ├── app.R │ │ └── global.R │ ├── app3-badglobal │ │ ├── R │ │ │ └── helper.R │ │ └── global.R │ ├── app4-both │ │ ├── app.R │ │ └── r │ │ │ └── lower.R │ ├── app5-bad-supporting │ │ ├── R │ │ │ └── helper.R │ │ └── global.R │ ├── app6-disabled │ │ ├── R │ │ │ ├── _DISABLE_autoload.r │ │ │ ├── helperCap.R │ │ │ └── helperLower.r │ │ ├── global.R │ │ ├── server.R │ │ └── ui.R │ ├── app6-empty-tests │ │ └── tests │ │ │ └── file.txt │ └── app7-port │ │ ├── app.R │ │ ├── option-broken.R │ │ ├── option.R │ │ ├── wrapped.R │ │ └── wrapped2.R ├── test-modules │ ├── 06_tabsets │ │ └── app.R │ ├── 107_scatterplot │ │ ├── R │ │ │ ├── linked-scatterplot-module.R │ │ │ └── scatterplot.R │ │ ├── app.R │ │ └── tests │ │ │ ├── testthat.R │ │ │ └── testthat │ │ │ ├── test-linked-scatterplot-module.R │ │ │ ├── test-plot.R │ │ │ └── test-server.R │ ├── 12_counter │ │ ├── R │ │ │ ├── my-module.R │ │ │ └── utils.R │ │ ├── app.R │ │ └── tests │ │ │ ├── testthat.R │ │ │ └── testthat │ │ │ ├── test-mymodule.R │ │ │ ├── test-server.R │ │ │ └── test-utils.R │ └── server_r │ │ ├── server.R │ │ └── ui.R ├── testthat.R └── testthat │ ├── _snaps │ ├── busy-indication.md │ ├── stacks-deep.md │ ├── stacks.md │ └── tabPanel.md │ ├── helper.R │ ├── print-reactiveValues.txt │ ├── test-actionButton.R │ ├── test-app.R │ ├── test-bind-cache.R │ ├── test-bind-event.R │ ├── test-bookmarking.R │ ├── test-bootstrap.r │ ├── test-built-files.R │ ├── test-busy-indication.R │ ├── test-devmode.R │ ├── test-diagnostics.R │ ├── test-gc.r │ ├── test-get-extension.R │ ├── test-hybrid-chain.R │ ├── test-inline-markdown.R │ ├── test-input-handler.R │ ├── test-input-select.R │ ├── test-input-slider.R │ ├── test-mock-session.R │ ├── test-modules.R │ ├── test-options.R │ ├── test-pkgdown.R │ ├── test-plot-coordmap.R │ ├── test-plot-png.R │ ├── test-promise-domains.R │ ├── test-reactives.R │ ├── test-reactivity.r │ ├── test-reactlog.R │ ├── test-render-functions.R │ ├── test-shinywrappers.R │ ├── test-stacks-deep.R │ ├── test-stacks-pruning.R │ ├── test-stacks.R │ ├── test-stop-app.R │ ├── test-tabPanel.R │ ├── test-test-runTests.R │ ├── test-test-server-app.R │ ├── test-test-server-nesting.R │ ├── test-test-server-scope.R │ ├── test-test-server.R │ ├── test-test-shinyAppTemplate.R │ ├── test-text.R │ ├── test-timer.R │ ├── test-update-input.R │ ├── test-url.R │ └── test-utils.R ├── tools ├── README.md ├── datepicker-patches │ ├── 001-fix-networkD3-sankey-svg-bugs.patch │ ├── 002-scss-improvements.patch │ └── 003-border-radius-mixin.patch ├── documentation │ ├── checkDocsCurrent.sh │ ├── checkPkgdown.R │ ├── pkgdown.yml │ ├── reexports.json │ └── updateReexports.R ├── ion.rangeSlider-patches │ ├── 0001-Add-skin-customized-for-Shiny.patch │ ├── 0002-Stop-propagation-of-click-and-down-events.patch │ ├── 0003-Try-catch-removeProp.patch │ ├── 0004-handle-cursor-pointer.patch │ ├── 0005-remove-unnecessary-styles.patch │ └── 0006-box-sizing-border-box.patch ├── selectize-patches │ ├── 000-selectize-a11y-assign-id.patch │ ├── 001-selectize-a11y-no-click.patch │ ├── 002-fix-sass-compile-errors.patch │ ├── 003-color-contrast-active-text.patch │ ├── 004-theming-friendly-defaults.patch │ ├── 005-bs5-font-styling.patch │ ├── 006-bs5-dark-mode-support.patch │ ├── 007-selectize-event-namespace-bugfix.patch │ ├── 008-selectize-revert-d2564a0a.patch │ └── 009-selectize-selectOnTab-false.patch ├── updateBootstrapAccessibilityPlugin.R ├── updateBootstrapDatepicker.R ├── updateDataTables.R ├── updateIonRangeSlider.R ├── updatePackageJsonVersion.R ├── updateSelectize.R ├── updateSpinnerTypes.R ├── updateStrftime.R ├── updatejQuery.R └── updatejQueryUI.R ├── tsconfig.json └── yarn.lock /.Rbuildignore: -------------------------------------------------------------------------------- 1 | ^\.Rproj\.user$ 2 | ^\.git$ 3 | ^examples$ 4 | ^shiny\.Rproj$ 5 | ^shiny\.sh$ 6 | ^shiny\.cmd$ 7 | ^run\.R$ 8 | ^\.gitignore$ 9 | ^smoketests$ 10 | ^res$ 11 | ^man-roxygen$ 12 | ^\.travis\.yml$ 13 | ^staticdocs$ 14 | ^tools$ 15 | ^srcts$ 16 | ^CONTRIBUTING.md$ 17 | ^cran-comments.md$ 18 | ^.*\.o$ 19 | ^appveyor\.yml$ 20 | ^revdep$ 21 | ^TODO-promises.md$ 22 | ^manualtests$ 23 | ^\.github$ 24 | 25 | ^\.yarn$ 26 | ^\.vscode$ 27 | ^\.madgerc$ 28 | ^\.prettierrc\.yml$ 29 | ^jest\.config\.js$ 30 | ^package\.json$ 31 | ^tsconfig\.json$ 32 | ^yarn\.lock$ 33 | ^node_modules$ 34 | ^coverage$ 35 | ^.ignore$ 36 | ^\.browserslistrc$ 37 | ^\.eslintrc\.yml$ 38 | ^\.yarnrc\.yml$ 39 | ^_dev$ 40 | -------------------------------------------------------------------------------- /.Rinstignore: -------------------------------------------------------------------------------- 1 | ^tools$ 2 | ^Rmd$ 3 | -------------------------------------------------------------------------------- /.browserslistrc: -------------------------------------------------------------------------------- 1 | # Browsers that we support 2 | last 2 versions 3 | not dead 4 | > 0.2% 5 | # > 1% 6 | Firefox ESR 7 | phantomjs 2.1 8 | IE 11 # sorry 9 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | /NEWS merge=union 2 | /inst/www/shared/shiny.js -merge -diff 3 | /inst/www/shared/shiny-*.js -merge -diff 4 | /inst/www/shared/shiny*.css -merge -diff 5 | *.min.js -merge -diff 6 | *.js.map -merge -diff 7 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name : Feature request 3 | about : Request a new feature. 4 | --- 5 | 6 | 17 | 18 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/question.md: -------------------------------------------------------------------------------- 1 | --- 2 | name : Ask a Question 3 | about : The issue tracker is not for questions -- please ask questions at https://forum.posit.co/tags/shiny. 4 | --- 5 | 6 | The issue tracker is not for questions. If you have a question, please feel free to ask it on our community site, at https://forum.posit.co/c/shiny. 7 | 8 | -------------------------------------------------------------------------------- /.github/shiny-workflows/routine.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -e 2 | . ./tools/documentation/checkDocsCurrent.sh 3 | 4 | echo "Updating package.json version to match DESCRIPTION Version" 5 | Rscript ./tools/updatePackageJsonVersion.R 6 | if [ -n "$(git status --porcelain package.json)" ] 7 | then 8 | echo "package.json has changed after running ./tools/updatePackageJsonVersion.R. Re-running 'yarn build'" 9 | yarn build 10 | git add ./inst package.json && git commit -m 'Sync package version (GitHub Actions)' || echo "No package version to commit" 11 | else 12 | echo "No package version difference detected; package.json is current." 13 | fi 14 | -------------------------------------------------------------------------------- /.github/workflows/R-CMD-check.yaml: -------------------------------------------------------------------------------- 1 | # Workflow derived from https://github.com/rstudio/shiny-workflows 2 | # 3 | # NOTE: This Shiny team GHA workflow is overkill for most R packages. 4 | # For most R packages it is better to use https://github.com/r-lib/actions 5 | on: 6 | push: 7 | branches: [main, rc-**] 8 | pull_request: 9 | branches: [main] 10 | schedule: 11 | - cron: '0 5 * * 1' # every monday 12 | 13 | name: Package checks 14 | 15 | jobs: 16 | website: 17 | uses: rstudio/shiny-workflows/.github/workflows/website.yaml@v1 18 | routine: 19 | uses: rstudio/shiny-workflows/.github/workflows/routine.yaml@v1 20 | with: 21 | node-version: "14.x" 22 | R-CMD-check: 23 | uses: rstudio/shiny-workflows/.github/workflows/R-CMD-check.yaml@v1 24 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .Rproj.user 3 | .Rhistory 4 | .Rprofile 5 | *.o 6 | *.so 7 | /src-i386/ 8 | /src-x86_64/ 9 | shinyapps/ 10 | README.html 11 | .*.Rnb.cached 12 | tools/yarn-error.log 13 | 14 | # TypeScript / yarn 15 | /node_modules/ 16 | .cache 17 | .yarn/* 18 | !.yarn/releases 19 | !.yarn/plugins 20 | !.yarn/sdks 21 | !.yarn/versions 22 | .pnp.* 23 | coverage/ 24 | madge.svg 25 | 26 | 27 | # GHA remotes installation 28 | .github/r-depends.rds 29 | -------------------------------------------------------------------------------- /.madgerc: -------------------------------------------------------------------------------- 1 | { 2 | "detectiveOptions": { 3 | "ts": { 4 | "skipTypeImports": true 5 | } 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": [ 3 | "dbaeumer.vscode-eslint", 4 | "esbenp.prettier-vscode" 5 | ] 6 | } 7 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "search.exclude": { 3 | "**/.yarn": true, 4 | "**/.pnp.*": true 5 | }, 6 | "prettier.prettierPath": "./node_modules/prettier", 7 | "typescript.enablePromptUseWorkspaceTsdk": true, 8 | "[r]": { 9 | "files.trimTrailingWhitespace": true, 10 | "files.insertFinalNewline": true, 11 | }, 12 | "[typescript]": { 13 | "editor.defaultFormatter": "esbenp.prettier-vscode", 14 | "editor.formatOnSave": true, 15 | "files.trimTrailingWhitespace": true, 16 | "files.insertFinalNewline": true, 17 | }, 18 | "[json]": { 19 | "editor.formatOnSave": true, 20 | "editor.defaultFormatter": "esbenp.prettier-vscode", 21 | "files.trimTrailingWhitespace": true, 22 | "files.insertFinalNewline": true, 23 | }, 24 | } 25 | -------------------------------------------------------------------------------- /.yarnrc.yml: -------------------------------------------------------------------------------- 1 | nodeLinker: node-modules 2 | 3 | plugins: 4 | - path: .yarn/plugins/@yarnpkg/plugin-outdated.cjs 5 | spec: "https://github.com/mskelton/yarn-plugin-outdated/raw/main/bundles/@yarnpkg/plugin-outdated.js" 6 | - path: .yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs 7 | spec: "@yarnpkg/plugin-interactive-tools" 8 | 9 | yarnPath: .yarn/releases/yarn-3.2.3.cjs 10 | checksumBehavior: update 11 | -------------------------------------------------------------------------------- /R/app-state.R: -------------------------------------------------------------------------------- 1 | #' @include globals.R 2 | NULL 3 | 4 | # The current app state is a place to read and hang state for the 5 | # currently-running application. This is useful for setting options that will 6 | # last as long as the application is running. 7 | 8 | .globals$appState <- NULL 9 | 10 | initCurrentAppState <- function(appobj) { 11 | if (!is.null(.globals$appState)) { 12 | stop("Can't initialize current app state when another is currently active.") 13 | } 14 | .globals$appState <- new.env(parent = emptyenv()) 15 | .globals$appState$app <- appobj 16 | # Copy over global options 17 | .globals$appState$options <- .globals$options 18 | } 19 | 20 | getCurrentAppState <- function() { 21 | .globals$appState 22 | } 23 | 24 | clearCurrentAppState <- function() { 25 | .globals$appState <- NULL 26 | } 27 | -------------------------------------------------------------------------------- /R/busy-indicators-spinners.R: -------------------------------------------------------------------------------- 1 | # Generated by tools/updateSpinnerTypes.R: do not edit by hand 2 | .busySpinnerTypes <- 3 | c("ring", "ring2", "ring3", "bars", "bars2", "bars3", "pulse", 4 | "pulse2", "pulse3", "dots", "dots2", "dots3") 5 | -------------------------------------------------------------------------------- /R/cache-utils.R: -------------------------------------------------------------------------------- 1 | # For our purposes, cache objects must support these methods. 2 | is_cache_object <- function(x) { 3 | # Use tryCatch in case the object does not support `$`. 4 | tryCatch( 5 | is.function(x$get) && is.function(x$set), 6 | error = function(e) FALSE 7 | ) 8 | } 9 | 10 | # Given a cache object, or string "app" or "session", return appropriate cache 11 | # object. 12 | resolve_cache_object <- function(cache, session) { 13 | if (identical(cache, "app")) { 14 | cache <- getShinyOption("cache", default = NULL) 15 | 16 | } else if (identical(cache, "session")) { 17 | cache <- session$cache 18 | } 19 | 20 | if (is_cache_object(cache)) { 21 | return(cache) 22 | } 23 | 24 | stop('`cache` must either be "app", "session", or a cache object with methods, `$get`, and `$set`.') 25 | } 26 | -------------------------------------------------------------------------------- /R/hooks.R: -------------------------------------------------------------------------------- 1 | 2 | 3 | # Call an application hook. Application hooks are provided so that front ends 4 | # can know when a Shiny application is running: 5 | # 6 | # shiny.onAppStart -- called when an application begins running 7 | # shiny.onAppStop -- called when an appliation stops 8 | # 9 | # Both hooks are passed the url where the application is accessible (appUrl). 10 | # Note that the appUrl can be NULL if the application was run on a UNIX domain 11 | # socket rather than a TCP/IP port/ 12 | callAppHook <- function(name, appUrl) { 13 | for (hook in getHooksList(paste0("shiny.", name))) 14 | hook(appUrl) 15 | } 16 | 17 | # The value for getHook can be a single function or a list of functions, 18 | # This function ensures that the result can always be processed as a list 19 | getHooksList <- function(name) { 20 | hooks <- getHook(name) 21 | if (!is.list(hooks)) 22 | hooks <- list(hooks) 23 | hooks 24 | } 25 | -------------------------------------------------------------------------------- /R/version_bs_date_picker.R: -------------------------------------------------------------------------------- 1 | # Generated by tools/updateBootstrapDatepicker.R; do not edit by hand 2 | version_bs_date_picker <- "1.9.0" 3 | -------------------------------------------------------------------------------- /R/version_ion_range_slider.R: -------------------------------------------------------------------------------- 1 | # Generated by tools/updateIonRangeSlider.R; do not edit by hand 2 | version_ion_range_slider <- "2.3.1" 3 | -------------------------------------------------------------------------------- /R/version_jquery.R: -------------------------------------------------------------------------------- 1 | # Generated by tools/updatejQuery.R; do not edit by hand 2 | version_jquery <- "3.6.0" 3 | -------------------------------------------------------------------------------- /R/version_jqueryui.R: -------------------------------------------------------------------------------- 1 | # Generated by tools/updatejQueryUI.R; do not edit by hand 2 | version_jqueryui <- "1.13.2" 3 | -------------------------------------------------------------------------------- /R/version_selectize.R: -------------------------------------------------------------------------------- 1 | # Generated by tools/updateSelectize.R; do not edit by hand 2 | version_selectize <- "0.15.2" 3 | -------------------------------------------------------------------------------- /R/version_strftime.R: -------------------------------------------------------------------------------- 1 | # Generated by tools/updateStrftime.R; do not edit by hand 2 | version_strftime <- "0.9.2" 3 | -------------------------------------------------------------------------------- /cran-comments.md: -------------------------------------------------------------------------------- 1 | ## revdepcheck results 2 | 3 | We checked 1278 reverse dependencies (1277 from CRAN + 1 from Bioconductor), comparing R CMD check results across CRAN and dev versions of shiny. 4 | 5 | * We saw 2 new problems (NOTEs only) 6 | * We failed to check 19 packages due to installation issues 7 | 8 | Issues with CRAN packages are summarised below. 9 | 10 | ### New problems 11 | 12 | R CMD check displayed NOTEs for two packages, unrelated to changes in shiny. 13 | 14 | * HH 15 | checking installed package size ... NOTE 16 | 17 | * PopED 18 | checking installed package size ... NOTE 19 | 20 | ### Failed to check 21 | 22 | * animalEKF 23 | * AovBay 24 | * Certara.VPCResults 25 | * chipPCR 26 | * ctsem 27 | * dartR.sim 28 | * diveR 29 | * gap 30 | * jsmodule 31 | * loon.shiny 32 | * robmedExtra 33 | * rstanarm 34 | * SensMap 35 | * Seurat 36 | * shinyTempSignal 37 | * Signac 38 | * statsr 39 | * TestAnaAPP 40 | * tidyvpc -------------------------------------------------------------------------------- /inst/app_template/R/example-module.R: -------------------------------------------------------------------------------- 1 | exampleModuleUI <- function(id, label = "Counter") { 2 | # All uses of Shiny input/output IDs in the UI must be namespaced, 3 | # as in ns("x"). 4 | ns <- NS(id) 5 | tagList( 6 | actionButton(ns("button"), label = label), 7 | verbatimTextOutput(ns("out")) 8 | ) 9 | } 10 | 11 | exampleModuleServer <- function(id) { 12 | # moduleServer() wraps a function to create the server component of a 13 | # module. 14 | moduleServer( 15 | id, 16 | function(input, output, session) { 17 | count <- reactiveVal(0) 18 | observeEvent(input$button, { 19 | count(count() + 1) 20 | }) 21 | output$out <- renderText({ 22 | count() 23 | }) 24 | count 25 | } 26 | ) 27 | } 28 | -------------------------------------------------------------------------------- /inst/app_template/R/example.R: -------------------------------------------------------------------------------- 1 | # Given a numeric vector, convert to strings, sort, and convert back to 2 | # numeric. 3 | lexical_sort <- function(x) { 4 | as.numeric(sort(as.character(x))) 5 | } 6 | -------------------------------------------------------------------------------- /inst/app_template/tests/testthat.R: -------------------------------------------------------------------------------- 1 | shinytest2::test_app() 2 | -------------------------------------------------------------------------------- /inst/app_template/tests/testthat/setup-shinytest2.R: -------------------------------------------------------------------------------- 1 | # Load application support files into testing environment 2 | shinytest2::load_app_env() 3 | -------------------------------------------------------------------------------- /inst/app_template/tests/testthat/test-examplemodule.R: -------------------------------------------------------------------------------- 1 | # See ?testServer for more information 2 | testServer(exampleModuleServer, { 3 | # Set initial value of a button 4 | session$setInputs(button = 0) 5 | 6 | # Check the value of the reactiveVal `count()` 7 | expect_equal(count(), 1) 8 | # Check the value of the renderText() 9 | expect_equal(output$out, "1") 10 | 11 | # Simulate a click 12 | session$setInputs(button = 1) 13 | 14 | expect_equal(count(), 2) 15 | expect_equal(output$out, "2") 16 | }) 17 | -------------------------------------------------------------------------------- /inst/app_template/tests/testthat/test-server.R: -------------------------------------------------------------------------------- 1 | testServer(expr = { 2 | # Set the `size` slider and check the output 3 | session$setInputs(size = 6) 4 | expect_equal(output$sequence, "1 2 3 4 5 6") 5 | {{ 6 | if (isTRUE(rdir)) { 7 | ' 8 | session$setInputs(size = 12) 9 | expect_equal(output$sequence, "1 10 11 12 2 3 4 5 6 7 8 9") 10 | ' 11 | } else { 12 | ' 13 | session$setInputs(size = 12) 14 | expect_equal(output$sequence, "1 2 3 4 5 6 7 8 9 10 11 12") 15 | ' 16 | } 17 | }}}) 18 | -------------------------------------------------------------------------------- /inst/app_template/tests/testthat/test-shinytest2.R: -------------------------------------------------------------------------------- 1 | library(shinytest2) 2 | 3 | test_that("Initial snapshot values are consistent", { 4 | app <- AppDriver$new(name = "init") 5 | app$expect_values() 6 | }){{ 7 | if (isTRUE(module)) { 8 | HTML(' 9 | 10 | 11 | test_that("Module values are consistent", { 12 | app <- AppDriver$new(name = "mod") 13 | app$click("examplemodule1-button") 14 | app$click("examplemodule1-button") 15 | app$expect_values() 16 | })') 17 | } 18 | }} 19 | -------------------------------------------------------------------------------- /inst/app_template/tests/testthat/test-sort.R: -------------------------------------------------------------------------------- 1 | # Test the lexical_sort function from R/example.R 2 | test_that("Lexical sorting works", { 3 | expect_equal(lexical_sort(c(1, 2, 3)), c(1, 2, 3)) 4 | expect_equal(lexical_sort(c(1, 2, 3, 13, 11, 21)), c(1, 11, 13, 2, 21, 3)) 5 | }) 6 | -------------------------------------------------------------------------------- /inst/examples-shiny/01_hello/DESCRIPTION: -------------------------------------------------------------------------------- 1 | Title: Hello Shiny! 2 | Author: RStudio, Inc. 3 | AuthorUrl: http://www.rstudio.com/ 4 | License: MIT 5 | Tags: getting-started 6 | Type: Shiny 7 | -------------------------------------------------------------------------------- /inst/examples-shiny/01_hello/Readme.md: -------------------------------------------------------------------------------- 1 | This small Shiny application demonstrates Shiny's automatic UI updates. 2 | 3 | Move the *Number of bins* slider and notice how the `renderPlot` expression is automatically re-evaluated when its dependant, `input$bins`, changes, causing a histogram with a new number of bins to be rendered. 4 | -------------------------------------------------------------------------------- /inst/examples-shiny/02_text/DESCRIPTION: -------------------------------------------------------------------------------- 1 | Title: Shiny Text 2 | Author: RStudio, Inc. 3 | AuthorUrl: http://www.rstudio.com/ 4 | License: MIT 5 | Tags: getting-started 6 | Type: Shiny 7 | -------------------------------------------------------------------------------- /inst/examples-shiny/02_text/Readme.md: -------------------------------------------------------------------------------- 1 | This example demonstrates output of raw text from R using the `renderPrint` function in `server` and the `verbatimTextOutput` function in `ui`. In this case, a textual summary of the data is shown using R's built-in `summary` function. 2 | -------------------------------------------------------------------------------- /inst/examples-shiny/03_reactivity/DESCRIPTION: -------------------------------------------------------------------------------- 1 | Title: Reactivity 2 | Author: RStudio, Inc. 3 | AuthorUrl: http://www.rstudio.com/ 4 | License: MIT 5 | Tags: getting-started 6 | Type: Shiny 7 | -------------------------------------------------------------------------------- /inst/examples-shiny/03_reactivity/Readme.md: -------------------------------------------------------------------------------- 1 | This example demonstrates a core feature of Shiny: **reactivity**. In the `server` function, a reactive called `datasetInput` is declared. 2 | 3 | Notice that the reactive expression depends on the input expression `input$dataset`, and that it's used by two output expressions: `output$summary` and `output$view`. Try changing the dataset (using *Choose a dataset*) while looking at the reactive and then at the outputs; you will see first the reactive and then its dependencies flash. 4 | 5 | Notice also that the reactive expression doesn't just update whenever anything changes--only the inputs it depends on will trigger an update. Change the "Caption" field and notice how only the `output$caption` expression is re-evaluated; the reactive and its dependents are left alone. 6 | -------------------------------------------------------------------------------- /inst/examples-shiny/04_mpg/DESCRIPTION: -------------------------------------------------------------------------------- 1 | Title: Miles Per Gallon 2 | Author: RStudio, Inc. 3 | AuthorUrl: http://www.rstudio.com/ 4 | License: MIT 5 | Tags: getting-started 6 | Type: Shiny 7 | -------------------------------------------------------------------------------- /inst/examples-shiny/04_mpg/Readme.md: -------------------------------------------------------------------------------- 1 | This example demonstrates the following concepts: 2 | 3 | - **Global variables**: The `mpgData` variable is declared outside of the `ui` and `server` function definitions. This makes it available anywhere inside `app.R`. The code in `app.R` outside of `ui` and `server` function definitions is only run once when the app starts up, so it can't contain user input. 4 | - **Reactive expressions**: `formulaText` is a reactive expression. Note how it re-evaluates when the Variable field is changed, but not when the Show Outliers box is unchecked. 5 | -------------------------------------------------------------------------------- /inst/examples-shiny/05_sliders/DESCRIPTION: -------------------------------------------------------------------------------- 1 | Title: Sliders 2 | Author: RStudio, Inc. 3 | AuthorUrl: http://www.rstudio.com/ 4 | License: MIT 5 | Tags: getting-started 6 | Type: Shiny 7 | -------------------------------------------------------------------------------- /inst/examples-shiny/05_sliders/Readme.md: -------------------------------------------------------------------------------- 1 | This example demonstrates Shiny's versatile `sliderInput` widget. 2 | 3 | Slider inputs can be used to select single values, to select a continuous range of values, and even to animate over a range. 4 | -------------------------------------------------------------------------------- /inst/examples-shiny/06_tabsets/DESCRIPTION: -------------------------------------------------------------------------------- 1 | Title: Tabsets 2 | Author: RStudio, Inc. 3 | AuthorUrl: http://www.rstudio.com/ 4 | License: MIT 5 | Tags: getting-started 6 | Type: Shiny 7 | -------------------------------------------------------------------------------- /inst/examples-shiny/06_tabsets/Readme.md: -------------------------------------------------------------------------------- 1 | This example demonstrates the `navset_*` and `nav_panel` widgets from the `bslib` package. 2 | 3 | Notice that outputs that are not visible are not re-evaluated until they become visible. Try this: 4 | 5 | 1. Scroll to the bottom of the `server` function. You might need to use the *show with app* option so you can easily view the code and interact with the app at the same time. 6 | 2. Change the number of observations, and observe that only `output$plot` is evaluated. 7 | 3. Click the Summary tab, and observe that `output$summary` is evaluated. 8 | 4. Change the number of observations again, and observe that now only `output$summary` is evaluated. 9 | 10 | -------------------------------------------------------------------------------- /inst/examples-shiny/07_widgets/DESCRIPTION: -------------------------------------------------------------------------------- 1 | Title: Widgets 2 | Author: RStudio, Inc. 3 | AuthorUrl: http://www.rstudio.com/ 4 | License: MIT 5 | Tags: getting-started 6 | Type: Shiny 7 | -------------------------------------------------------------------------------- /inst/examples-shiny/07_widgets/Readme.md: -------------------------------------------------------------------------------- 1 | This example demonstrates some additional widgets included in Shiny, such as `helpText` and `actionButton`. The latter is used to delay rendering output until the user explicitly requests it (a construct which also introduces two important server functions, `eventReactive` and `isolate`). 2 | -------------------------------------------------------------------------------- /inst/examples-shiny/08_html/DESCRIPTION: -------------------------------------------------------------------------------- 1 | Title: Custom HTML UI 2 | Author: RStudio, Inc. 3 | AuthorUrl: http://www.rstudio.com/ 4 | License: MIT 5 | Tags: getting-started 6 | Type: Shiny 7 | -------------------------------------------------------------------------------- /inst/examples-shiny/08_html/Readme.md: -------------------------------------------------------------------------------- 1 | Normally we use the built-in functions, such as `textInput()`, to generate the HTML UI in the R script `ui.R`. Actually **shiny** also works with a custom HTML page `www/index.html`. See [the tutorial](http://shiny.rstudio.com/tutorial/) for more details. 2 | -------------------------------------------------------------------------------- /inst/examples-shiny/09_upload/DESCRIPTION: -------------------------------------------------------------------------------- 1 | Title: File Upload 2 | Author: RStudio, Inc. 3 | AuthorUrl: http://www.rstudio.com/ 4 | License: MIT 5 | Tags: getting-started 6 | Type: Shiny 7 | -------------------------------------------------------------------------------- /inst/examples-shiny/09_upload/Readme.md: -------------------------------------------------------------------------------- 1 | We can add a file upload input in the UI using the function `fileInput()`, 2 | e.g. `fileInput('foo')`. In the `server` function, we can access the 3 | uploaded files via `input$foo`. 4 | -------------------------------------------------------------------------------- /inst/examples-shiny/10_download/DESCRIPTION: -------------------------------------------------------------------------------- 1 | Title: File Download 2 | Author: RStudio, Inc. 3 | AuthorUrl: http://www.rstudio.com/ 4 | License: MIT 5 | Tags: getting-started 6 | Type: Shiny 7 | -------------------------------------------------------------------------------- /inst/examples-shiny/10_download/Readme.md: -------------------------------------------------------------------------------- 1 | We can add a download button to the UI using `downloadButton()`, and write 2 | the content of the file in `downloadHandler()` in the `server` function. 3 | -------------------------------------------------------------------------------- /inst/examples-shiny/11_timer/DESCRIPTION: -------------------------------------------------------------------------------- 1 | Title: Timer 2 | Author: RStudio, Inc. 3 | AuthorUrl: http://www.rstudio.com/ 4 | License: MIT 5 | Tags: getting-started 6 | Type: Shiny 7 | -------------------------------------------------------------------------------- /inst/examples-shiny/11_timer/Readme.md: -------------------------------------------------------------------------------- 1 | The function `invalidateLater()` can be used to invalidate an observer or 2 | reactive expression in a given number of milliseconds. In this example, the 3 | output `currentTime` is updated every second, so it shows the current time 4 | on a second basis. 5 | -------------------------------------------------------------------------------- /inst/examples-shiny/11_timer/app.R: -------------------------------------------------------------------------------- 1 | library(shiny) 2 | library(bslib) 3 | 4 | # Define UI for displaying current time ---- 5 | ui <- page_fluid( 6 | h2(textOutput("currentTime")) 7 | ) 8 | 9 | # Define server logic to show current time, update every second ---- 10 | server <- function(input, output, session) { 11 | output$currentTime <- renderText({ 12 | invalidateLater(1000, session) 13 | paste("The current time is", Sys.time()) 14 | }) 15 | } 16 | 17 | # Create Shiny app ---- 18 | shinyApp(ui, server) 19 | -------------------------------------------------------------------------------- /inst/examples/01_hello/DESCRIPTION: -------------------------------------------------------------------------------- 1 | Title: Hello Shiny! 2 | Author: RStudio, Inc. 3 | AuthorUrl: http://www.rstudio.com/ 4 | License: MIT 5 | DisplayMode: Showcase 6 | Tags: getting-started 7 | Type: Shiny 8 | -------------------------------------------------------------------------------- /inst/examples/01_hello/Readme.md: -------------------------------------------------------------------------------- 1 | This small Shiny application demonstrates Shiny's automatic UI updates. 2 | 3 | Move the *Number of bins* slider and notice how the `renderPlot` expression is automatically re-evaluated when its dependant, `input$bins`, changes, causing a histogram with a new number of bins to be rendered. 4 | -------------------------------------------------------------------------------- /inst/examples/02_text/DESCRIPTION: -------------------------------------------------------------------------------- 1 | Title: Shiny Text 2 | Author: RStudio, Inc. 3 | AuthorUrl: http://www.rstudio.com/ 4 | License: MIT 5 | DisplayMode: Showcase 6 | Tags: getting-started 7 | Type: Shiny 8 | 9 | -------------------------------------------------------------------------------- /inst/examples/02_text/Readme.md: -------------------------------------------------------------------------------- 1 | This example demonstrates output of raw text from R using the `renderPrint` function in `server` and the `verbatimTextOutput` function in `ui`. In this case, a textual summary of the data is shown using R's built-in `summary` function. 2 | -------------------------------------------------------------------------------- /inst/examples/03_reactivity/DESCRIPTION: -------------------------------------------------------------------------------- 1 | Title: Reactivity 2 | Author: RStudio, Inc. 3 | AuthorUrl: http://www.rstudio.com/ 4 | License: MIT 5 | DisplayMode: Showcase 6 | Tags: getting-started 7 | Type: Shiny 8 | -------------------------------------------------------------------------------- /inst/examples/03_reactivity/Readme.md: -------------------------------------------------------------------------------- 1 | This example demonstrates a core feature of Shiny: **reactivity**. In the `server` function, a reactive called `datasetInput` is declared. 2 | 3 | Notice that the reactive expression depends on the input expression `input$dataset`, and that it's used by two output expressions: `output$summary` and `output$view`. Try changing the dataset (using *Choose a dataset*) while looking at the reactive and then at the outputs; you will see first the reactive and then its dependencies flash. 4 | 5 | Notice also that the reactive expression doesn't just update whenever anything changes--only the inputs it depends on will trigger an update. Change the "Caption" field and notice how only the `output$caption` expression is re-evaluated; the reactive and its dependents are left alone. 6 | -------------------------------------------------------------------------------- /inst/examples/04_mpg/DESCRIPTION: -------------------------------------------------------------------------------- 1 | Title: Miles Per Gallon 2 | Author: RStudio, Inc. 3 | AuthorUrl: http://www.rstudio.com/ 4 | License: MIT 5 | DisplayMode: Showcase 6 | Tags: getting-started 7 | Type: Shiny 8 | -------------------------------------------------------------------------------- /inst/examples/04_mpg/Readme.md: -------------------------------------------------------------------------------- 1 | This example demonstrates the following concepts: 2 | 3 | - **Global variables**: The `mpgData` variable is declared outside of the `ui` and `server` function definitions. This makes it available anywhere inside `app.R`. The code in `app.R` outside of `ui` and `server` function definitions is only run once when the app starts up, so it can't contain user input. 4 | - **Reactive expressions**: `formulaText` is a reactive expression. Note how it re-evaluates when the Variable field is changed, but not when the Show Outliers box is unchecked. 5 | -------------------------------------------------------------------------------- /inst/examples/05_sliders/DESCRIPTION: -------------------------------------------------------------------------------- 1 | Title: Sliders 2 | Author: RStudio, Inc. 3 | AuthorUrl: http://www.rstudio.com/ 4 | License: MIT 5 | DisplayMode: Showcase 6 | Tags: getting-started 7 | Type: Shiny 8 | -------------------------------------------------------------------------------- /inst/examples/05_sliders/Readme.md: -------------------------------------------------------------------------------- 1 | This example demonstrates Shiny's versatile `sliderInput` widget. 2 | 3 | Slider inputs can be used to select single values, to select a continuous range of values, and even to animate over a range. 4 | -------------------------------------------------------------------------------- /inst/examples/06_tabsets/DESCRIPTION: -------------------------------------------------------------------------------- 1 | Title: Tabsets 2 | Author: RStudio, Inc. 3 | AuthorUrl: http://www.rstudio.com/ 4 | License: MIT 5 | DisplayMode: Showcase 6 | Tags: getting-started 7 | Type: Shiny 8 | -------------------------------------------------------------------------------- /inst/examples/06_tabsets/Readme.md: -------------------------------------------------------------------------------- 1 | This example demonstrates the `tabsetPanel` and `tabPanel` widgets. 2 | 3 | Notice that outputs that are not visible are not re-evaluated until they become visible. Try this: 4 | 5 | 1. Scroll to the bottom of the `server` function. You might need to use the *show with app* option so you can easily view the code and interact with the app at the same time. 6 | 2. Change the number of observations, and observe that only `output$plot` is evaluated. 7 | 3. Click the Summary tab, and observe that `output$summary` is evaluated. 8 | 4. Change the number of observations again, and observe that now only `output$summary` is evaluated. 9 | 10 | -------------------------------------------------------------------------------- /inst/examples/07_widgets/DESCRIPTION: -------------------------------------------------------------------------------- 1 | Title: Widgets 2 | Author: RStudio, Inc. 3 | AuthorUrl: http://www.rstudio.com/ 4 | License: MIT 5 | DisplayMode: Showcase 6 | Tags: getting-started 7 | Type: Shiny 8 | -------------------------------------------------------------------------------- /inst/examples/07_widgets/Readme.md: -------------------------------------------------------------------------------- 1 | This example demonstrates some additional widgets included in Shiny, such as `helpText` and `actionButton`. The latter is used to delay rendering output until the user explicitly requests it (a construct which also introduces two important server functions, `eventReactive` and `isolate`). 2 | -------------------------------------------------------------------------------- /inst/examples/09_upload/DESCRIPTION: -------------------------------------------------------------------------------- 1 | Title: File Upload 2 | Author: RStudio, Inc. 3 | AuthorUrl: http://www.rstudio.com/ 4 | License: MIT 5 | DisplayMode: Showcase 6 | Tags: getting-started 7 | Type: Shiny 8 | -------------------------------------------------------------------------------- /inst/examples/09_upload/Readme.md: -------------------------------------------------------------------------------- 1 | We can add a file upload input in the UI using the function `fileInput()`, 2 | e.g. `fileInput('foo')`. In the `server` function, we can access the 3 | uploaded files via `input$foo`. 4 | -------------------------------------------------------------------------------- /inst/examples/10_download/DESCRIPTION: -------------------------------------------------------------------------------- 1 | Title: File Download 2 | Author: RStudio, Inc. 3 | AuthorUrl: http://www.rstudio.com/ 4 | License: MIT 5 | DisplayMode: Showcase 6 | Tags: getting-started 7 | Type: Shiny 8 | -------------------------------------------------------------------------------- /inst/examples/10_download/Readme.md: -------------------------------------------------------------------------------- 1 | We can add a download button to the UI using `downloadButton()`, and write 2 | the content of the file in `downloadHandler()` in the `server` function. 3 | -------------------------------------------------------------------------------- /inst/examples/11_timer/DESCRIPTION: -------------------------------------------------------------------------------- 1 | Title: Timer 2 | Author: RStudio, Inc. 3 | AuthorUrl: http://www.rstudio.com/ 4 | License: MIT 5 | DisplayMode: Showcase 6 | Tags: getting-started 7 | Type: Shiny 8 | -------------------------------------------------------------------------------- /inst/examples/11_timer/Readme.md: -------------------------------------------------------------------------------- 1 | The function `invalidateLater()` can be used to invalidate an observer or 2 | reactive expression in a given number of milliseconds. In this example, the 3 | output `currentTime` is updated every second, so it shows the current time 4 | on a second basis. 5 | -------------------------------------------------------------------------------- /inst/examples/11_timer/app.R: -------------------------------------------------------------------------------- 1 | library(shiny) 2 | 3 | # Define UI for displaying current time ---- 4 | ui <- fluidPage( 5 | 6 | h2(textOutput("currentTime")) 7 | 8 | ) 9 | 10 | # Define server logic to show current time, update every second ---- 11 | server <- function(input, output, session) { 12 | 13 | output$currentTime <- renderText({ 14 | invalidateLater(1000, session) 15 | paste("The current time is", Sys.time()) 16 | }) 17 | 18 | } 19 | 20 | # Create Shiny app ---- 21 | shinyApp(ui, server) 22 | -------------------------------------------------------------------------------- /inst/template/default.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {{ headContent() }} 5 | 6 | {{ body }} 7 | 8 | -------------------------------------------------------------------------------- /inst/template/error.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | An error has occurred 5 | 6 | 7 | 8 | 9 |

An error has occurred!

10 |

{{message}}

11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /inst/www-dir/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |

No UI defined

6 |

Shiny couldn't find any UI for this application. We looked in:

7 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /inst/www/shared/bootstrap/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstudio/shiny/eac0eea88612c26eb78d9cc906b01ad0b2ccb3f5/inst/www/shared/bootstrap/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /inst/www/shared/bootstrap/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstudio/shiny/eac0eea88612c26eb78d9cc906b01ad0b2ccb3f5/inst/www/shared/bootstrap/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /inst/www/shared/bootstrap/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstudio/shiny/eac0eea88612c26eb78d9cc906b01ad0b2ccb3f5/inst/www/shared/bootstrap/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /inst/www/shared/bootstrap/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstudio/shiny/eac0eea88612c26eb78d9cc906b01ad0b2ccb3f5/inst/www/shared/bootstrap/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /inst/www/shared/bootstrap/js/npm.js: -------------------------------------------------------------------------------- 1 | // This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment. 2 | require('../../js/transition.js') 3 | require('../../js/alert.js') 4 | require('../../js/button.js') 5 | require('../../js/carousel.js') 6 | require('../../js/collapse.js') 7 | require('../../js/dropdown.js') 8 | require('../../js/modal.js') 9 | require('../../js/tooltip.js') 10 | require('../../js/popover.js') 11 | require('../../js/scrollspy.js') 12 | require('../../js/tab.js') 13 | require('../../js/affix.js') -------------------------------------------------------------------------------- /inst/www/shared/busy-indicators/spinners/bars.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /inst/www/shared/busy-indicators/spinners/bars2.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /inst/www/shared/busy-indicators/spinners/dots.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /inst/www/shared/busy-indicators/spinners/dots2.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /inst/www/shared/busy-indicators/spinners/pulse.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /inst/www/shared/busy-indicators/spinners/pulse2.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /inst/www/shared/busy-indicators/spinners/pulse3.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /inst/www/shared/busy-indicators/spinners/ring.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /inst/www/shared/busy-indicators/spinners/ring2.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /inst/www/shared/busy-indicators/spinners/ring3.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /inst/www/shared/datatables/images/sort_asc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstudio/shiny/eac0eea88612c26eb78d9cc906b01ad0b2ccb3f5/inst/www/shared/datatables/images/sort_asc.png -------------------------------------------------------------------------------- /inst/www/shared/datatables/images/sort_asc_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstudio/shiny/eac0eea88612c26eb78d9cc906b01ad0b2ccb3f5/inst/www/shared/datatables/images/sort_asc_disabled.png -------------------------------------------------------------------------------- /inst/www/shared/datatables/images/sort_both.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstudio/shiny/eac0eea88612c26eb78d9cc906b01ad0b2ccb3f5/inst/www/shared/datatables/images/sort_both.png -------------------------------------------------------------------------------- /inst/www/shared/datatables/images/sort_desc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstudio/shiny/eac0eea88612c26eb78d9cc906b01ad0b2ccb3f5/inst/www/shared/datatables/images/sort_desc.png -------------------------------------------------------------------------------- /inst/www/shared/datatables/images/sort_desc_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstudio/shiny/eac0eea88612c26eb78d9cc906b01ad0b2ccb3f5/inst/www/shared/datatables/images/sort_desc_disabled.png -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker-en-CA.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates["en-CA"]={days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],daysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],daysMin:["Su","Mo","Tu","We","Th","Fr","Sa"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],monthsShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],today:"Today",monthsTitle:"Months",clear:"Clear",weekStart:0,format:"yyyy-mm-dd"},a.fn.datepicker.deprecated("This filename doesn't follow the convention, use bootstrap-datepicker.en-CA.js instead.")}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.ar-tn.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates["ar-tn"]={days:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت","الأحد"],daysShort:["أحد","اثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت","أحد"],daysMin:["ح","ن","ث","ع","خ","ج","س","ح"],months:["جانفي","فيفري","مارس","أفريل","ماي","جوان","جويليه","أوت","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],monthsShort:["جانفي","فيفري","مارس","أفريل","ماي","جوان","جويليه","أوت","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],today:"هذا اليوم",rtl:!0}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.ar.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.ar={days:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت","الأحد"],daysShort:["أحد","اثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت","أحد"],daysMin:["ح","ن","ث","ع","خ","ج","س","ح"],months:["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],monthsShort:["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],today:"هذا اليوم",rtl:!0}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.az.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.az={days:["Bazar","Bazar ertəsi","Çərşənbə axşamı","Çərşənbə","Cümə axşamı","Cümə","Şənbə"],daysShort:["B.","B.e","Ç.a","Ç.","C.a","C.","Ş."],daysMin:["B.","B.e","Ç.a","Ç.","C.a","C.","Ş."],months:["Yanvar","Fevral","Mart","Aprel","May","İyun","İyul","Avqust","Sentyabr","Oktyabr","Noyabr","Dekabr"],monthsShort:["Yan","Fev","Mar","Apr","May","İyun","İyul","Avq","Sen","Okt","Noy","Dek"],today:"Bu gün",weekStart:1,clear:"Təmizlə",monthsTitle:"Aylar"}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.bg.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.bg={days:["Неделя","Понеделник","Вторник","Сряда","Четвъртък","Петък","Събота"],daysShort:["Нед","Пон","Вто","Сря","Чет","Пет","Съб"],daysMin:["Н","П","В","С","Ч","П","С"],months:["Януари","Февруари","Март","Април","Май","Юни","Юли","Август","Септември","Октомври","Ноември","Декември"],monthsShort:["Ян","Фев","Мар","Апр","Май","Юни","Юли","Авг","Сеп","Окт","Ное","Дек"],today:"днес"}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.bm.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.bm={days:["Kari","Ntɛnɛn","Tarata","Araba","Alamisa","Juma","Sibiri"],daysShort:["Kar","Ntɛ","Tar","Ara","Ala","Jum","Sib"],daysMin:["Ka","Nt","Ta","Ar","Al","Ju","Si"],months:["Zanwuyekalo","Fewuruyekalo","Marisikalo","Awirilikalo","Mɛkalo","Zuwɛnkalo","Zuluyekalo","Utikalo","Sɛtanburukalo","ɔkutɔburukalo","Nowanburukalo","Desanburukalo"],monthsShort:["Zan","Few","Mar","Awi","Mɛ","Zuw","Zul","Uti","Sɛt","ɔku","Now","Des"],today:"Bi",monthsTitle:"Kalo",clear:"Ka jɔsi",weekStart:1,format:"dd/mm/yyyy"}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.bn.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.bn={days:["রবিবার","সোমবার","মঙ্গলবার","বুধবার","বৃহস্পতিবার","শুক্রবার","শনিবার"],daysShort:["রবিবার","সোমবার","মঙ্গলবার","বুধবার","বৃহস্পতিবার","শুক্রবার","শনিবার"],daysMin:["রবি","সোম","মঙ্গল","বুধ","বৃহস্পতি","শুক্র","শনি"],months:["জানুয়ারী","ফেব্রুয়ারি","মার্চ","এপ্রিল","মে","জুন","জুলাই","অগাস্ট","সেপ্টেম্বর","অক্টোবর","নভেম্বর","ডিসেম্বর"],monthsShort:["জানুয়ারী","ফেব্রুয়ারি","মার্চ","এপ্রিল","মে","জুন","জুলাই","অগাস্ট","সেপ্টেম্বর","অক্টোবর","নভেম্বর","ডিসেম্বর"],today:"আজ",monthsTitle:"মাস",clear:"পরিষ্কার",weekStart:0,format:"mm/dd/yyyy"}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.br.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.br={days:["Sul","Lun","Meurzh","Merc'her","Yaou","Gwener","Sadorn"],daysShort:["Sul","Lun","Meu.","Mer.","Yao.","Gwe.","Sad."],daysMin:["Su","L","Meu","Mer","Y","G","Sa"],months:["Genver","C'hwevrer","Meurzh","Ebrel","Mae","Mezheven","Gouere","Eost","Gwengolo","Here","Du","Kerzu"],monthsShort:["Genv.","C'hw.","Meur.","Ebre.","Mae","Mezh.","Goue.","Eost","Gwen.","Here","Du","Kerz."],today:"Hiziv",monthsTitle:"Miz",clear:"Dilemel",weekStart:1,format:"dd/mm/yyyy"}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.bs.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.bs={days:["Nedjelja","Ponedjeljak","Utorak","Srijeda","Četvrtak","Petak","Subota"],daysShort:["Ned","Pon","Uto","Sri","Čet","Pet","Sub"],daysMin:["N","Po","U","Sr","Č","Pe","Su"],months:["Januar","Februar","Mart","April","Maj","Juni","Juli","August","Septembar","Oktobar","Novembar","Decembar"],monthsShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],today:"Danas",weekStart:1,format:"dd.mm.yyyy"}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.ca.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.ca={days:["Diumenge","Dilluns","Dimarts","Dimecres","Dijous","Divendres","Dissabte"],daysShort:["Diu","Dil","Dmt","Dmc","Dij","Div","Dis"],daysMin:["dg","dl","dt","dc","dj","dv","ds"],months:["Gener","Febrer","Març","Abril","Maig","Juny","Juliol","Agost","Setembre","Octubre","Novembre","Desembre"],monthsShort:["Gen","Feb","Mar","Abr","Mai","Jun","Jul","Ago","Set","Oct","Nov","Des"],today:"Avui",monthsTitle:"Mesos",clear:"Esborrar",weekStart:1,format:"dd/mm/yyyy"}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.cs.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.cs={days:["Neděle","Pondělí","Úterý","Středa","Čtvrtek","Pátek","Sobota"],daysShort:["Ned","Pon","Úte","Stř","Čtv","Pát","Sob"],daysMin:["Ne","Po","Út","St","Čt","Pá","So"],months:["Leden","Únor","Březen","Duben","Květen","Červen","Červenec","Srpen","Září","Říjen","Listopad","Prosinec"],monthsShort:["Led","Úno","Bře","Dub","Kvě","Čer","Čnc","Srp","Zář","Říj","Lis","Pro"],today:"Dnes",clear:"Vymazat",monthsTitle:"Měsíc",weekStart:1,format:"dd.mm.yyyy"}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.cy.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.cy={days:["Sul","Llun","Mawrth","Mercher","Iau","Gwener","Sadwrn"],daysShort:["Sul","Llu","Maw","Mer","Iau","Gwe","Sad"],daysMin:["Su","Ll","Ma","Me","Ia","Gwe","Sa"],months:["Ionawr","Chewfror","Mawrth","Ebrill","Mai","Mehefin","Gorfennaf","Awst","Medi","Hydref","Tachwedd","Rhagfyr"],monthsShort:["Ion","Chw","Maw","Ebr","Mai","Meh","Gor","Aws","Med","Hyd","Tach","Rha"],today:"Heddiw"}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.da.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.da={days:["Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag"],daysShort:["Søn","Man","Tir","Ons","Tor","Fre","Lør"],daysMin:["Sø","Ma","Ti","On","To","Fr","Lø"],months:["Januar","Februar","Marts","April","Maj","Juni","Juli","August","September","Oktober","November","December"],monthsShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],today:"I Dag",weekStart:1,clear:"Nulstil",format:"dd/mm/yyyy",monthsTitle:"Måneder"}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.de.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.de={days:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],daysShort:["Son","Mon","Die","Mit","Don","Fre","Sam"],daysMin:["So","Mo","Di","Mi","Do","Fr","Sa"],months:["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],monthsShort:["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],today:"Heute",monthsTitle:"Monate",clear:"Löschen",weekStart:1,format:"dd.mm.yyyy"}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.el.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.el={days:["Κυριακή","Δευτέρα","Τρίτη","Τετάρτη","Πέμπτη","Παρασκευή","Σάββατο"],daysShort:["Κυρ","Δευ","Τρι","Τετ","Πεμ","Παρ","Σαβ"],daysMin:["Κυ","Δε","Τρ","Τε","Πε","Πα","Σα"],months:["Ιανουάριος","Φεβρουάριος","Μάρτιος","Απρίλιος","Μάιος","Ιούνιος","Ιούλιος","Αύγουστος","Σεπτέμβριος","Οκτώβριος","Νοέμβριος","Δεκέμβριος"],monthsShort:["Ιαν","Φεβ","Μαρ","Απρ","Μάι","Ιουν","Ιουλ","Αυγ","Σεπ","Οκτ","Νοε","Δεκ"],today:"Σήμερα",clear:"Καθαρισμός",weekStart:1,format:"d/m/yyyy"}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.en-AU.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates["en-AU"]={days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],daysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],daysMin:["Su","Mo","Tu","We","Th","Fr","Sa"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],monthsShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],today:"Today",monthsTitle:"Months",clear:"Clear",weekStart:1,format:"d/mm/yyyy"}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.en-CA.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates["en-CA"]={days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],daysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],daysMin:["Su","Mo","Tu","We","Th","Fr","Sa"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],monthsShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],today:"Today",monthsTitle:"Months",clear:"Clear",weekStart:0,format:"yyyy-mm-dd"}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.en-GB.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates["en-GB"]={days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],daysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],daysMin:["Su","Mo","Tu","We","Th","Fr","Sa"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],monthsShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],today:"Today",monthsTitle:"Months",clear:"Clear",weekStart:1,format:"dd/mm/yyyy"}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.en-IE.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates["en-IE"]={days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],daysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],daysMin:["Su","Mo","Tu","We","Th","Fr","Sa"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],monthsShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],today:"Today",monthsTitle:"Months",clear:"Clear",weekStart:1,format:"dd/mm/yyyy"}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.en-NZ.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates["en-NZ"]={days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],daysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],daysMin:["Su","Mo","Tu","We","Th","Fr","Sa"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],monthsShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],today:"Today",monthsTitle:"Months",clear:"Clear",weekStart:1,format:"d/mm/yyyy"}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.en-ZA.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates["en-ZA"]={days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],daysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],daysMin:["Su","Mo","Tu","We","Th","Fr","Sa"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],monthsShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],today:"Today",monthsTitle:"Months",clear:"Clear",weekStart:1,format:"yyyy/mm/d"}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.eo.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.eo={days:["dimanĉo","lundo","mardo","merkredo","ĵaŭdo","vendredo","sabato"],daysShort:["dim.","lun.","mar.","mer.","ĵaŭ.","ven.","sam."],daysMin:["d","l","ma","me","ĵ","v","s"],months:["januaro","februaro","marto","aprilo","majo","junio","julio","aŭgusto","septembro","oktobro","novembro","decembro"],monthsShort:["jan.","feb.","mar.","apr.","majo","jun.","jul.","aŭg.","sep.","okt.","nov.","dec."],today:"Hodiaŭ",clear:"Nuligi",weekStart:1,format:"yyyy-mm-dd"}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.es.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.es={days:["Domingo","Lunes","Martes","Miércoles","Jueves","Viernes","Sábado"],daysShort:["Dom","Lun","Mar","Mié","Jue","Vie","Sáb"],daysMin:["Do","Lu","Ma","Mi","Ju","Vi","Sa"],months:["Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"],monthsShort:["Ene","Feb","Mar","Abr","May","Jun","Jul","Ago","Sep","Oct","Nov","Dic"],today:"Hoy",monthsTitle:"Meses",clear:"Borrar",weekStart:1,format:"dd/mm/yyyy"}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.et.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.et={days:["Pühapäev","Esmaspäev","Teisipäev","Kolmapäev","Neljapäev","Reede","Laupäev"],daysShort:["Pühap","Esmasp","Teisip","Kolmap","Neljap","Reede","Laup"],daysMin:["P","E","T","K","N","R","L"],months:["Jaanuar","Veebruar","Märts","Aprill","Mai","Juuni","Juuli","August","September","Oktoober","November","Detsember"],monthsShort:["Jaan","Veebr","Märts","Apr","Mai","Juuni","Juuli","Aug","Sept","Okt","Nov","Dets"],today:"Täna",clear:"Tühjenda",weekStart:1,format:"dd.mm.yyyy"}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.eu.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.eu={days:["Igandea","Astelehena","Asteartea","Asteazkena","Osteguna","Ostirala","Larunbata"],daysShort:["Ig","Al","Ar","Az","Og","Ol","Lr"],daysMin:["Ig","Al","Ar","Az","Og","Ol","Lr"],months:["Urtarrila","Otsaila","Martxoa","Apirila","Maiatza","Ekaina","Uztaila","Abuztua","Iraila","Urria","Azaroa","Abendua"],monthsShort:["Urt","Ots","Mar","Api","Mai","Eka","Uzt","Abu","Ira","Urr","Aza","Abe"],today:"Gaur",monthsTitle:"Hilabeteak",clear:"Ezabatu",weekStart:1,format:"yyyy/mm/dd"}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.fa.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.fa={days:["یک‌شنبه","دوشنبه","سه‌شنبه","چهارشنبه","پنج‌شنبه","جمعه","شنبه","یک‌شنبه"],daysShort:["یک","دو","سه","چهار","پنج","جمعه","شنبه","یک"],daysMin:["ی","د","س","چ","پ","ج","ش","ی"],months:["ژانویه","فوریه","مارس","آوریل","مه","ژوئن","ژوئیه","اوت","سپتامبر","اکتبر","نوامبر","دسامبر"],monthsShort:["ژان","فور","مار","آور","مه","ژون","ژوی","اوت","سپت","اکت","نوا","دسا"],today:"امروز",clear:"پاک کن",weekStart:1,format:"yyyy/mm/dd"}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.fi.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.fi={days:["sunnuntai","maanantai","tiistai","keskiviikko","torstai","perjantai","lauantai"],daysShort:["sun","maa","tii","kes","tor","per","lau"],daysMin:["su","ma","ti","ke","to","pe","la"],months:["tammikuu","helmikuu","maaliskuu","huhtikuu","toukokuu","kesäkuu","heinäkuu","elokuu","syyskuu","lokakuu","marraskuu","joulukuu"],monthsShort:["tam","hel","maa","huh","tou","kes","hei","elo","syy","lok","mar","jou"],today:"tänään",clear:"Tyhjennä",weekStart:1,format:"d.m.yyyy"}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.fo.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.fo={days:["Sunnudagur","Mánadagur","Týsdagur","Mikudagur","Hósdagur","Fríggjadagur","Leygardagur"],daysShort:["Sun","Mán","Týs","Mik","Hós","Frí","Ley"],daysMin:["Su","Má","Tý","Mi","Hó","Fr","Le"],months:["Januar","Februar","Marts","Apríl","Mei","Juni","Juli","August","Septembur","Oktobur","Novembur","Desembur"],monthsShort:["Jan","Feb","Mar","Apr","Mei","Jun","Jul","Aug","Sep","Okt","Nov","Des"],today:"Í Dag",clear:"Reinsa"}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.fr-CH.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.fr={days:["Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"],daysShort:["Dim","Lun","Mar","Mer","Jeu","Ven","Sam"],daysMin:["D","L","Ma","Me","J","V","S"],months:["Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre","Novembre","Décembre"],monthsShort:["Jan","Fév","Mar","Avr","Mai","Jui","Jul","Aou","Sep","Oct","Nov","Déc"],today:"Aujourd'hui",monthsTitle:"Mois",clear:"Effacer",weekStart:1,format:"dd.mm.yyyy"}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.fr.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.fr={days:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],daysShort:["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],daysMin:["d","l","ma","me","j","v","s"],months:["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],monthsShort:["janv.","févr.","mars","avril","mai","juin","juil.","août","sept.","oct.","nov.","déc."],today:"Aujourd'hui",monthsTitle:"Mois",clear:"Effacer",weekStart:1,format:"dd/mm/yyyy"}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.gl.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.gl={days:["Domingo","Luns","Martes","Mércores","Xoves","Venres","Sábado"],daysShort:["Dom","Lun","Mar","Mér","Xov","Ven","Sáb"],daysMin:["Do","Lu","Ma","Me","Xo","Ve","Sa"],months:["Xaneiro","Febreiro","Marzo","Abril","Maio","Xuño","Xullo","Agosto","Setembro","Outubro","Novembro","Decembro"],monthsShort:["Xan","Feb","Mar","Abr","Mai","Xun","Xul","Ago","Sep","Out","Nov","Dec"],today:"Hoxe",clear:"Limpar",weekStart:1,format:"dd/mm/yyyy"}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.he.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.he={days:["ראשון","שני","שלישי","רביעי","חמישי","שישי","שבת","ראשון"],daysShort:["א","ב","ג","ד","ה","ו","ש","א"],daysMin:["א","ב","ג","ד","ה","ו","ש","א"],months:["ינואר","פברואר","מרץ","אפריל","מאי","יוני","יולי","אוגוסט","ספטמבר","אוקטובר","נובמבר","דצמבר"],monthsShort:["ינו","פבר","מרץ","אפר","מאי","יונ","יול","אוג","ספט","אוק","נוב","דצמ"],today:"היום",rtl:!0}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.hi.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.hi={days:["रविवार","सोमवार","मंगलवार","बुधवार","गुरुवार","शुक्रवार","शनिवार"],daysShort:["सूर्य","सोम","मंगल","बुध","गुरु","शुक्र","शनि"],daysMin:["र","सो","मं","बु","गु","शु","श"],months:["जनवरी","फ़रवरी","मार्च","अप्रैल","मई","जून","जुलाई","अगस्त","सितम्बर","अक्टूबर","नवंबर","दिसम्बर"],monthsShort:["जन","फ़रवरी","मार्च","अप्रैल","मई","जून","जुलाई","अगस्त","सितं","अक्टूबर","नवं","दिसम्बर"],today:"आज",monthsTitle:"महीने",clear:"साफ",weekStart:1,format:"dd / mm / yyyy"}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.hr.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.hr={days:["Nedjelja","Ponedjeljak","Utorak","Srijeda","Četvrtak","Petak","Subota"],daysShort:["Ned","Pon","Uto","Sri","Čet","Pet","Sub"],daysMin:["Ne","Po","Ut","Sr","Če","Pe","Su"],months:["Siječanj","Veljača","Ožujak","Travanj","Svibanj","Lipanj","Srpanj","Kolovoz","Rujan","Listopad","Studeni","Prosinac"],monthsShort:["Sij","Velj","Ožu","Tra","Svi","Lip","Srp","Kol","Ruj","Lis","Stu","Pro"],today:"Danas"}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.hu.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.hu={days:["vasárnap","hétfő","kedd","szerda","csütörtök","péntek","szombat"],daysShort:["vas","hét","ked","sze","csü","pén","szo"],daysMin:["V","H","K","Sze","Cs","P","Szo"],months:["január","február","március","április","május","június","július","augusztus","szeptember","október","november","december"],monthsShort:["jan","feb","már","ápr","máj","jún","júl","aug","sze","okt","nov","dec"],today:"ma",weekStart:1,clear:"töröl",titleFormat:"yyyy. MM",format:"yyyy.mm.dd"}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.hy.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.hy={days:["Կիրակի","Երկուշաբթի","Երեքշաբթի","Չորեքշաբթի","Հինգշաբթի","Ուրբաթ","Շաբաթ"],daysShort:["Կիր","Երկ","Երե","Չոր","Հին","Ուրբ","Շաբ"],daysMin:["Կի","Եկ","Եք","Չո","Հի","Ու","Շա"],months:["Հունվար","Փետրվար","Մարտ","Ապրիլ","Մայիս","Հունիս","Հուլիս","Օգոստոս","Սեպտեմբեր","Հոկտեմբեր","Նոյեմբեր","Դեկտեմբեր"],monthsShort:["Հնվ","Փետ","Մար","Ապր","Մայ","Հուն","Հուլ","Օգս","Սեպ","Հոկ","Նոյ","Դեկ"],today:"Այսօր",clear:"Ջնջել",format:"dd.mm.yyyy",weekStart:1,monthsTitle:"Ամիսնէր"}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.id.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.id={days:["Minggu","Senin","Selasa","Rabu","Kamis","Jumat","Sabtu"],daysShort:["Mgu","Sen","Sel","Rab","Kam","Jum","Sab"],daysMin:["Mg","Sn","Sl","Ra","Ka","Ju","Sa"],months:["Januari","Februari","Maret","April","Mei","Juni","Juli","Agustus","September","Oktober","November","Desember"],monthsShort:["Jan","Feb","Mar","Apr","Mei","Jun","Jul","Ags","Sep","Okt","Nov","Des"],today:"Hari Ini",clear:"Kosongkan"}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.is.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.is={days:["Sunnudagur","Mánudagur","Þriðjudagur","Miðvikudagur","Fimmtudagur","Föstudagur","Laugardagur"],daysShort:["Sun","Mán","Þri","Mið","Fim","Fös","Lau"],daysMin:["Su","Má","Þr","Mi","Fi","Fö","La"],months:["Janúar","Febrúar","Mars","Apríl","Maí","Júní","Júlí","Ágúst","September","Október","Nóvember","Desember"],monthsShort:["Jan","Feb","Mar","Apr","Maí","Jún","Júl","Ágú","Sep","Okt","Nóv","Des"],today:"Í Dag"}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.it-CH.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.it={days:["Domenica","Lunedì","Martedì","Mercoledì","Giovedì","Venerdì","Sabato"],daysShort:["Dom","Lun","Mar","Mer","Gio","Ven","Sab"],daysMin:["Do","Lu","Ma","Me","Gi","Ve","Sa"],months:["Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre"],monthsShort:["Gen","Feb","Mar","Apr","Mag","Giu","Lug","Ago","Set","Ott","Nov","Dic"],today:"Oggi",clear:"Cancella",weekStart:1,format:"dd.mm.yyyy"}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.it.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.it={days:["Domenica","Lunedì","Martedì","Mercoledì","Giovedì","Venerdì","Sabato"],daysShort:["Dom","Lun","Mar","Mer","Gio","Ven","Sab"],daysMin:["Do","Lu","Ma","Me","Gi","Ve","Sa"],months:["Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre"],monthsShort:["Gen","Feb","Mar","Apr","Mag","Giu","Lug","Ago","Set","Ott","Nov","Dic"],today:"Oggi",monthsTitle:"Mesi",clear:"Cancella",weekStart:1,format:"dd/mm/yyyy"}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.ja.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.ja={days:["日曜","月曜","火曜","水曜","木曜","金曜","土曜"],daysShort:["日","月","火","水","木","金","土"],daysMin:["日","月","火","水","木","金","土"],months:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],monthsShort:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],today:"今日",format:"yyyy/mm/dd",titleFormat:"yyyy年mm月",clear:"クリア"}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.ka.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.ka={days:["კვირა","ორშაბათი","სამშაბათი","ოთხშაბათი","ხუთშაბათი","პარასკევი","შაბათი"],daysShort:["კვი","ორშ","სამ","ოთხ","ხუთ","პარ","შაბ"],daysMin:["კვ","ორ","სა","ოთ","ხუ","პა","შა"],months:["იანვარი","თებერვალი","მარტი","აპრილი","მაისი","ივნისი","ივლისი","აგვისტო","სექტემბერი","ოქტომბერი","ნოემბერი","დეკემბერი"],monthsShort:["იან","თებ","მარ","აპრ","მაი","ივნ","ივლ","აგვ","სექ","ოქტ","ნოე","დეკ"],today:"დღეს",clear:"გასუფთავება",weekStart:1,format:"dd.mm.yyyy"}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.kh.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.kh={days:["អាទិត្យ","ចន្ទ","អង្គារ","ពុធ","ព្រហស្បតិ៍","សុក្រ","សៅរ៍"],daysShort:["អា.ទិ","ចន្ទ","អង្គារ","ពុធ","ព្រ.ហ","សុក្រ","សៅរ៍"],daysMin:["អា.ទិ","ចន្ទ","អង្គារ","ពុធ","ព្រ.ហ","សុក្រ","សៅរ៍"],months:["មករា","កុម្ភះ","មិនា","មេសា","ឧសភា","មិថុនា","កក្កដា","សីហា","កញ្ញា","តុលា","វិច្ឆិកា","ធ្នូ"],monthsShort:["មករា","កុម្ភះ","មិនា","មេសា","ឧសភា","មិថុនា","កក្កដា","សីហា","កញ្ញា","តុលា","វិច្ឆិកា","ធ្នូ"],today:"ថ្ងៃនេះ",clear:"សំអាត"},a.fn.datepicker.deprecated('The language code "kh" is deprecated and will be removed in 2.0. For Khmer support use "km" instead.')}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.kk.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.kk={days:["Жексенбі","Дүйсенбі","Сейсенбі","Сәрсенбі","Бейсенбі","Жұма","Сенбі"],daysShort:["Жек","Дүй","Сей","Сәр","Бей","Жұм","Сен"],daysMin:["Жк","Дс","Сс","Ср","Бс","Жм","Сн"],months:["Қаңтар","Ақпан","Наурыз","Сәуір","Мамыр","Маусым","Шілде","Тамыз","Қыркүйек","Қазан","Қараша","Желтоқсан"],monthsShort:["Қаң","Ақп","Нау","Сәу","Мам","Мау","Шіл","Там","Қыр","Қаз","Қар","Жел"],today:"Бүгін",weekStart:1}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.km.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.km={days:["អាទិត្យ","ចន្ទ","អង្គារ","ពុធ","ព្រហស្បតិ៍","សុក្រ","សៅរ៍"],daysShort:["អា.ទិ","ចន្ទ","អង្គារ","ពុធ","ព្រ.ហ","សុក្រ","សៅរ៍"],daysMin:["អា.ទិ","ចន្ទ","អង្គារ","ពុធ","ព្រ.ហ","សុក្រ","សៅរ៍"],months:["មករា","កុម្ភះ","មិនា","មេសា","ឧសភា","មិថុនា","កក្កដា","សីហា","កញ្ញា","តុលា","វិច្ឆិកា","ធ្នូ"],monthsShort:["មករា","កុម្ភះ","មិនា","មេសា","ឧសភា","មិថុនា","កក្កដា","សីហា","កញ្ញា","តុលា","វិច្ឆិកា","ធ្នូ"],today:"ថ្ងៃនេះ",clear:"សំអាត"}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.ko.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.ko={days:["일요일","월요일","화요일","수요일","목요일","금요일","토요일"],daysShort:["일","월","화","수","목","금","토"],daysMin:["일","월","화","수","목","금","토"],months:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],monthsShort:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],today:"오늘",clear:"삭제",format:"yyyy-mm-dd",titleFormat:"yyyy년mm월",weekStart:0}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.kr.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.kr={days:["일요일","월요일","화요일","수요일","목요일","금요일","토요일"],daysShort:["일","월","화","수","목","금","토"],daysMin:["일","월","화","수","목","금","토"],months:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],monthsShort:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"]},a.fn.datepicker.deprecated('The language code "kr" is deprecated and will be removed in 2.0. For korean support use "ko" instead.')}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.lt.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.lt={days:["Sekmadienis","Pirmadienis","Antradienis","Trečiadienis","Ketvirtadienis","Penktadienis","Šeštadienis"],daysShort:["S","Pr","A","T","K","Pn","Š"],daysMin:["Sk","Pr","An","Tr","Ke","Pn","Št"],months:["Sausis","Vasaris","Kovas","Balandis","Gegužė","Birželis","Liepa","Rugpjūtis","Rugsėjis","Spalis","Lapkritis","Gruodis"],monthsShort:["Sau","Vas","Kov","Bal","Geg","Bir","Lie","Rugp","Rugs","Spa","Lap","Gru"],today:"Šiandien",monthsTitle:"Mėnesiai",clear:"Išvalyti",weekStart:1,format:"yyyy-mm-dd"}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.lv.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.lv={days:["Svētdiena","Pirmdiena","Otrdiena","Trešdiena","Ceturtdiena","Piektdiena","Sestdiena"],daysShort:["Sv","P","O","T","C","Pk","S"],daysMin:["Sv","Pr","Ot","Tr","Ce","Pk","Se"],months:["Janvāris","Februāris","Marts","Aprīlis","Maijs","Jūnijs","Jūlijs","Augusts","Septembris","Oktobris","Novembris","Decembris"],monthsShort:["Jan","Feb","Mar","Apr","Mai","Jūn","Jūl","Aug","Sep","Okt","Nov","Dec"],monthsTitle:"Mēneši",today:"Šodien",clear:"Nodzēst",weekStart:1}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.me.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.me={days:["Nedjelja","Ponedjeljak","Utorak","Srijeda","Četvrtak","Petak","Subota"],daysShort:["Ned","Pon","Uto","Sri","Čet","Pet","Sub"],daysMin:["Ne","Po","Ut","Sr","Če","Pe","Su"],months:["Januar","Februar","Mart","April","Maj","Jun","Jul","Avgust","Septembar","Oktobar","Novembar","Decembar"],monthsShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Avg","Sep","Okt","Nov","Dec"],today:"Danas",weekStart:1,clear:"Izbriši",format:"dd.mm.yyyy"}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.mk.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.mk={days:["Недела","Понеделник","Вторник","Среда","Четврток","Петок","Сабота"],daysShort:["Нед","Пон","Вто","Сре","Чет","Пет","Саб"],daysMin:["Не","По","Вт","Ср","Че","Пе","Са"],months:["Јануари","Февруари","Март","Април","Мај","Јуни","Јули","Август","Септември","Октомври","Ноември","Декември"],monthsShort:["Јан","Фев","Мар","Апр","Мај","Јун","Јул","Авг","Сеп","Окт","Ное","Дек"],today:"Денес",format:"dd.mm.yyyy"}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.mn.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.mn={days:["Ням","Даваа","Мягмар","Лхагва","Пүрэв","Баасан","Бямба"],daysShort:["Ням","Дав","Мяг","Лха","Пүр","Баа","Бям"],daysMin:["Ня","Да","Мя","Лх","Пү","Ба","Бя"],months:["Хулгана","Үхэр","Бар","Туулай","Луу","Могой","Морь","Хонь","Бич","Тахиа","Нохой","Гахай"],monthsShort:["Хул","Үхэ","Бар","Туу","Луу","Мог","Мор","Хон","Бич","Тах","Нох","Гах"],today:"Өнөөдөр",clear:"Тодорхой",format:"yyyy.mm.dd",weekStart:1}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.ms.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.ms={days:["Ahad","Isnin","Selasa","Rabu","Khamis","Jumaat","Sabtu"],daysShort:["Aha","Isn","Sel","Rab","Kha","Jum","Sab"],daysMin:["Ah","Is","Se","Ra","Kh","Ju","Sa"],months:["Januari","Februari","Mac","April","Mei","Jun","Julai","Ogos","September","Oktober","November","Disember"],monthsShort:["Jan","Feb","Mar","Apr","Mei","Jun","Jul","Ogo","Sep","Okt","Nov","Dis"],today:"Hari Ini",clear:"Bersihkan"}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.nl-BE.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates["nl-BE"]={days:["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"],daysShort:["zo","ma","di","wo","do","vr","za"],daysMin:["zo","ma","di","wo","do","vr","za"],months:["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],monthsShort:["jan","feb","mrt","apr","mei","jun","jul","aug","sep","okt","nov","dec"],today:"Vandaag",monthsTitle:"Maanden",clear:"Leegmaken",weekStart:1,format:"dd/mm/yyyy"}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.nl.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.nl={days:["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"],daysShort:["zo","ma","di","wo","do","vr","za"],daysMin:["zo","ma","di","wo","do","vr","za"],months:["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],monthsShort:["jan","feb","mrt","apr","mei","jun","jul","aug","sep","okt","nov","dec"],today:"Vandaag",monthsTitle:"Maanden",clear:"Wissen",weekStart:1,format:"dd-mm-yyyy"}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.no.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.no={days:["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"],daysShort:["søn","man","tir","ons","tor","fre","lør"],daysMin:["sø","ma","ti","on","to","fr","lø"],months:["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"],monthsShort:["jan","feb","mar","apr","mai","jun","jul","aug","sep","okt","nov","des"],today:"i dag",monthsTitle:"Måneder",clear:"Nullstill",weekStart:1,format:"dd.mm.yyyy"}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.oc.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.oc={days:["Dimenge","Diluns","Dimars","Dimècres","Dijòus","Divendres","Dissabte"],daysShort:["Dim","Dil","Dmr","Dmc","Dij","Div","Dis"],daysMin:["dg","dl","dr","dc","dj","dv","ds"],months:["Genièr","Febrièr","Març","Abrial","Mai","Junh","Julhet","Agost","Setembre","Octobre","Novembre","Decembre"],monthsShort:["Gen","Feb","Mar","Abr","Mai","Jun","Jul","Ago","Set","Oct","Nov","Dec"],today:"Uèi",monthsTitle:"Meses",clear:"Escafar",weekStart:1,format:"dd/mm/yyyy"}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.pl.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.pl={days:["Niedziela","Poniedziałek","Wtorek","Środa","Czwartek","Piątek","Sobota"],daysShort:["Niedz.","Pon.","Wt.","Śr.","Czw.","Piąt.","Sob."],daysMin:["Ndz.","Pn.","Wt.","Śr.","Czw.","Pt.","Sob."],months:["Styczeń","Luty","Marzec","Kwiecień","Maj","Czerwiec","Lipiec","Sierpień","Wrzesień","Październik","Listopad","Grudzień"],monthsShort:["Sty.","Lut.","Mar.","Kwi.","Maj","Cze.","Lip.","Sie.","Wrz.","Paź.","Lis.","Gru."],today:"Dzisiaj",weekStart:1,clear:"Wyczyść",format:"dd.mm.yyyy"}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.pt-BR.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates["pt-BR"]={days:["Domingo","Segunda","Terça","Quarta","Quinta","Sexta","Sábado"],daysShort:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],daysMin:["Do","Se","Te","Qu","Qu","Se","Sa"],months:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],monthsShort:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],today:"Hoje",monthsTitle:"Meses",clear:"Limpar",format:"dd/mm/yyyy"}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.pt.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.pt={days:["Domingo","Segunda","Terça","Quarta","Quinta","Sexta","Sábado"],daysShort:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],daysMin:["Do","Se","Te","Qu","Qu","Se","Sa"],months:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],monthsShort:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],today:"Hoje",monthsTitle:"Meses",clear:"Limpar",format:"dd/mm/yyyy"}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.ro.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.ro={days:["Duminică","Luni","Marţi","Miercuri","Joi","Vineri","Sâmbătă"],daysShort:["Dum","Lun","Mar","Mie","Joi","Vin","Sâm"],daysMin:["Du","Lu","Ma","Mi","Jo","Vi","Sâ"],months:["Ianuarie","Februarie","Martie","Aprilie","Mai","Iunie","Iulie","August","Septembrie","Octombrie","Noiembrie","Decembrie"],monthsShort:["Ian","Feb","Mar","Apr","Mai","Iun","Iul","Aug","Sep","Oct","Nov","Dec"],today:"Astăzi",clear:"Șterge",weekStart:1,format:"dd/mm/yyyy"}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.rs-latin.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates["rs-latin"]={days:["Nedelja","Ponedeljak","Utorak","Sreda","Četvrtak","Petak","Subota"],daysShort:["Ned","Pon","Uto","Sre","Čet","Pet","Sub"],daysMin:["N","Po","U","Sr","Č","Pe","Su"],months:["Januar","Februar","Mart","April","Maj","Jun","Jul","Avgust","Septembar","Oktobar","Novembar","Decembar"],monthsShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Avg","Sep","Okt","Nov","Dec"],today:"Danas",weekStart:1,format:"dd.mm.yyyy"},a.fn.datepicker.deprecated('This language code "rs-latin" is deprecated (invalid serbian language code) and will be removed in 2.0. For Serbian latin support use "sr-latin" instead.')}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.rs.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.rs={days:["Недеља","Понедељак","Уторак","Среда","Четвртак","Петак","Субота"],daysShort:["Нед","Пон","Уто","Сре","Чет","Пет","Суб"],daysMin:["Н","По","У","Ср","Ч","Пе","Су"],months:["Јануар","Фебруар","Март","Април","Мај","Јун","Јул","Август","Септембар","Октобар","Новембар","Децембар"],monthsShort:["Јан","Феб","Мар","Апр","Мај","Јун","Јул","Авг","Сеп","Окт","Нов","Дец"],today:"Данас",weekStart:1,format:"dd.mm.yyyy"},a.fn.datepicker.deprecated('This language code "rs" is deprecated (invalid serbian language code) and will be removed in 2.0. For Serbian support use "sr" instead.')}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.ru.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.ru={days:["Воскресенье","Понедельник","Вторник","Среда","Четверг","Пятница","Суббота"],daysShort:["Вск","Пнд","Втр","Срд","Чтв","Птн","Суб"],daysMin:["Вс","Пн","Вт","Ср","Чт","Пт","Сб"],months:["Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"],monthsShort:["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"],today:"Сегодня",clear:"Очистить",format:"dd.mm.yyyy",weekStart:1,monthsTitle:"Месяцы"}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.si.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.si={days:["ඉරිදා","සඳුදා","අඟහරුවාදා","බදාදා","බ්‍රහස්පතින්දා","සිකුරාදා","සෙනසුරාදා"],daysShort:["ඉරි","සඳු","අඟ","බදා","බ්‍රහ","සිකු","සෙන"],daysMin:["ඉ","ස","අ","බ","බ්‍ර","සි","සෙ"],months:["ජනවාරි","පෙබරවාරි","මාර්තු","අප්‍රේල්","මැයි","ජුනි","ජූලි","අගෝස්තු","සැප්තැම්බර්","ඔක්තෝබර්","නොවැම්බර්","දෙසැම්බර්"],monthsShort:["ජන","පෙබ","මාර්","අප්‍රේ","මැයි","ජුනි","ජූලි","අගෝ","සැප්","ඔක්","නොවැ","දෙසැ"],today:"අද",monthsTitle:"මාස",clear:"මකන්න",weekStart:0,format:"yyyy-mm-dd"}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.sk.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.sk={days:["Nedeľa","Pondelok","Utorok","Streda","Štvrtok","Piatok","Sobota"],daysShort:["Ned","Pon","Uto","Str","Štv","Pia","Sob"],daysMin:["Ne","Po","Ut","St","Št","Pia","So"],months:["Január","Február","Marec","Apríl","Máj","Jún","Júl","August","September","Október","November","December"],monthsShort:["Jan","Feb","Mar","Apr","Máj","Jún","Júl","Aug","Sep","Okt","Nov","Dec"],today:"Dnes",clear:"Vymazať",weekStart:1,format:"d.m.yyyy"}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.sl.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.sl={days:["Nedelja","Ponedeljek","Torek","Sreda","Četrtek","Petek","Sobota"],daysShort:["Ned","Pon","Tor","Sre","Čet","Pet","Sob"],daysMin:["Ne","Po","To","Sr","Če","Pe","So"],months:["Januar","Februar","Marec","April","Maj","Junij","Julij","Avgust","September","Oktober","November","December"],monthsShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Avg","Sep","Okt","Nov","Dec"],today:"Danes",weekStart:1}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.sq.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.sq={days:["E Diel","E Hënë","E Martē","E Mërkurë","E Enjte","E Premte","E Shtunë"],daysShort:["Die","Hën","Mar","Mër","Enj","Pre","Shtu"],daysMin:["Di","Hë","Ma","Më","En","Pr","Sht"],months:["Janar","Shkurt","Mars","Prill","Maj","Qershor","Korrik","Gusht","Shtator","Tetor","Nëntor","Dhjetor"],monthsShort:["Jan","Shk","Mar","Pri","Maj","Qer","Korr","Gu","Sht","Tet","Nën","Dhjet"],monthsTitle:"Muaj",today:"Sot",weekStart:1,format:"dd/mm/yyyy",clear:"Pastro"}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.sr-latin.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates["sr-latin"]={days:["Nedelja","Ponedeljak","Utorak","Sreda","Četvrtak","Petak","Subota"],daysShort:["Ned","Pon","Uto","Sre","Čet","Pet","Sub"],daysMin:["N","Po","U","Sr","Č","Pe","Su"],months:["Januar","Februar","Mart","April","Maj","Jun","Jul","Avgust","Septembar","Oktobar","Novembar","Decembar"],monthsShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Avg","Sep","Okt","Nov","Dec"],today:"Danas",weekStart:1,format:"dd.mm.yyyy"}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.sr.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.sr={days:["Недеља","Понедељак","Уторак","Среда","Четвртак","Петак","Субота"],daysShort:["Нед","Пон","Уто","Сре","Чет","Пет","Суб"],daysMin:["Н","По","У","Ср","Ч","Пе","Су"],months:["Јануар","Фебруар","Март","Април","Мај","Јун","Јул","Август","Септембар","Октобар","Новембар","Децембар"],monthsShort:["Јан","Феб","Мар","Апр","Мај","Јун","Јул","Авг","Сеп","Окт","Нов","Дец"],today:"Данас",weekStart:1,format:"dd.mm.yyyy"}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.sv.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.sv={days:["söndag","måndag","tisdag","onsdag","torsdag","fredag","lördag"],daysShort:["sön","mån","tis","ons","tor","fre","lör"],daysMin:["sö","må","ti","on","to","fr","lö"],months:["januari","februari","mars","april","maj","juni","juli","augusti","september","oktober","november","december"],monthsShort:["jan","feb","mar","apr","maj","jun","jul","aug","sep","okt","nov","dec"],today:"Idag",format:"yyyy-mm-dd",weekStart:1,clear:"Rensa"}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.sw.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.sw={days:["Jumapili","Jumatatu","Jumanne","Jumatano","Alhamisi","Ijumaa","Jumamosi"],daysShort:["J2","J3","J4","J5","Alh","Ij","J1"],daysMin:["2","3","4","5","A","I","1"],months:["Januari","Februari","Machi","Aprili","Mei","Juni","Julai","Agosti","Septemba","Oktoba","Novemba","Desemba"],monthsShort:["Jan","Feb","Mac","Apr","Mei","Jun","Jul","Ago","Sep","Okt","Nov","Des"],today:"Leo"}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.ta.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.ta={days:["ஞாயிறு","திங்கள்","செவ்வாய்","புதன்","வியாழன்","வெள்ளி","சனி"],daysShort:["ஞாயி","திங்","செவ்","புத","வியா","வெள்","சனி"],daysMin:["ஞா","தி","செ","பு","வி","வெ","ச"],months:["ஜனவரி","பிப்ரவரி","மார்ச்","ஏப்ரல்","மே","ஜூன்","ஜூலை","ஆகஸ்டு","செப்டம்பர்","அக்டோபர்","நவம்பர்","டிசம்பர்"],monthsShort:["ஜன","பிப்","மார்","ஏப்","மே","ஜூன்","ஜூலை","ஆக","செப்","அக்","நவ","டிச"],today:"இன்று",monthsTitle:"மாதங்கள்",clear:"நீக்கு",weekStart:1,format:"dd/mm/yyyy"}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.tg.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.tg={days:["Якшанбе","Душанбе","Сешанбе","Чоршанбе","Панҷшанбе","Ҷумъа","Шанбе"],daysShort:["Яшб","Дшб","Сшб","Чшб","Пшб","Ҷум","Шнб"],daysMin:["Яш","Дш","Сш","Чш","Пш","Ҷм","Шб"],months:["Январ","Феврал","Март","Апрел","Май","Июн","Июл","Август","Сентябр","Октябр","Ноябр","Декабр"],monthsShort:["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"],today:"Имрӯз",monthsTitle:"Моҳҳо",clear:"Тоза намудан",weekStart:1,format:"dd.mm.yyyy"}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.th.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.th={days:["อาทิตย์","จันทร์","อังคาร","พุธ","พฤหัส","ศุกร์","เสาร์","อาทิตย์"],daysShort:["อา","จ","อ","พ","พฤ","ศ","ส","อา"],daysMin:["อา","จ","อ","พ","พฤ","ศ","ส","อา"],months:["มกราคม","กุมภาพันธ์","มีนาคม","เมษายน","พฤษภาคม","มิถุนายน","กรกฎาคม","สิงหาคม","กันยายน","ตุลาคม","พฤศจิกายน","ธันวาคม"],monthsShort:["ม.ค.","ก.พ.","มี.ค.","เม.ย.","พ.ค.","มิ.ย.","ก.ค.","ส.ค.","ก.ย.","ต.ค.","พ.ย.","ธ.ค."],today:"วันนี้"}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.tk.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.tk={days:["Ýekşenbe","Duşenbe","Sişenbe","Çarşenbe","Penşenbe","Anna","Şenbe"],daysShort:["Ýek","Duş","Siş","Çar","Pen","Ann","Şen"],daysMin:["Ýe","Du","Si","Ça","Pe","An","Şe"],months:["Ýanwar","Fewral","Mart","Aprel","Maý","Iýun","Iýul","Awgust","Sentýabr","Oktýabr","Noýabr","Dekabr"],monthsShort:["Ýan","Few","Mar","Apr","Maý","Iýn","Iýl","Awg","Sen","Okt","Noý","Dek"],today:"Bu gün",monthsTitle:"Aýlar",clear:"Aýyr",weekStart:1,format:"dd.mm.yyyy"}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.tr.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.tr={days:["Pazar","Pazartesi","Salı","Çarşamba","Perşembe","Cuma","Cumartesi"],daysShort:["Pz","Pzt","Sal","Çrş","Prş","Cu","Cts"],daysMin:["Pz","Pzt","Sa","Çr","Pr","Cu","Ct"],months:["Ocak","Şubat","Mart","Nisan","Mayıs","Haziran","Temmuz","Ağustos","Eylül","Ekim","Kasım","Aralık"],monthsShort:["Oca","Şub","Mar","Nis","May","Haz","Tem","Ağu","Eyl","Eki","Kas","Ara"],today:"Bugün",clear:"Temizle",weekStart:1,format:"dd.mm.yyyy"}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.uk.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.uk={days:["Неділя","Понеділок","Вівторок","Середа","Четвер","П'ятниця","Субота"],daysShort:["Нед","Пнд","Втр","Срд","Чтв","Птн","Суб"],daysMin:["Нд","Пн","Вт","Ср","Чт","Пт","Сб"],months:["Cічень","Лютий","Березень","Квітень","Травень","Червень","Липень","Серпень","Вересень","Жовтень","Листопад","Грудень"],monthsShort:["Січ","Лют","Бер","Кві","Тра","Чер","Лип","Сер","Вер","Жов","Лис","Гру"],today:"Сьогодні",clear:"Очистити",format:"dd.mm.yyyy",weekStart:1}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.uz-cyrl.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates["uz-cyrl"]={days:["Якшанба","Душанба","Сешанба","Чоршанба","Пайшанба","Жума","Шанба"],daysShort:["Якш","Ду","Се","Чор","Пай","Жу","Ша"],daysMin:["Як","Ду","Се","Чо","Па","Жу","Ша"],months:["Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"],monthsShort:["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"],today:"Бугун",clear:"Ўчириш",format:"dd.mm.yyyy",weekStart:1,monthsTitle:"Ойлар"}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.uz-latn.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates["uz-latn"]={days:["Yakshanba","Dushanba","Seshanba","Chorshanba","Payshanba","Juma","Shanba"],daysShort:["Yak","Du","Se","Chor","Pay","Ju","Sha"],daysMin:["Ya","Du","Se","Cho","Pa","Ju","Sha"],months:["Yanvar","Fevral","Mart","Aprel","May","Iyun","Iyul","Avgust","Sentabr","Oktabr","Noyabr","Dekabr"],monthsShort:["Yan","Fev","Mar","Apr","May","Iyn","Iyl","Avg","Sen","Okt","Noy","Dek"],today:"Bugun",clear:"O'chirish",format:"dd.mm.yyyy",weekStart:1,monthsTitle:"Oylar"}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.vi.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates.vi={days:["Chủ nhật","Thứ hai","Thứ ba","Thứ tư","Thứ năm","Thứ sáu","Thứ bảy"],daysShort:["CN","Thứ 2","Thứ 3","Thứ 4","Thứ 5","Thứ 6","Thứ 7"],daysMin:["CN","T2","T3","T4","T5","T6","T7"],months:["Tháng 1","Tháng 2","Tháng 3","Tháng 4","Tháng 5","Tháng 6","Tháng 7","Tháng 8","Tháng 9","Tháng 10","Tháng 11","Tháng 12"],monthsShort:["Th1","Th2","Th3","Th4","Th5","Th6","Th7","Th8","Th9","Th10","Th11","Th12"],today:"Hôm nay",clear:"Xóa",format:"dd/mm/yyyy"}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.zh-CN.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates["zh-CN"]={days:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],daysShort:["周日","周一","周二","周三","周四","周五","周六"],daysMin:["日","一","二","三","四","五","六"],months:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthsShort:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],today:"今天",monthsTitle:"选择月份",clear:"清除",format:"yyyy-mm-dd",titleFormat:"yyyy年mm月",weekStart:1}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/datepicker/js/locales/bootstrap-datepicker.zh-TW.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.datepicker.dates["zh-TW"]={days:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],daysShort:["週日","週一","週二","週三","週四","週五","週六"],daysMin:["日","一","二","三","四","五","六"],months:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthsShort:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],today:"今天",format:"yyyy年mm月dd日",weekStart:1,clear:"清除"}}(jQuery); -------------------------------------------------------------------------------- /inst/www/shared/ionrangeslider/scss/_mixins.scss: -------------------------------------------------------------------------------- 1 | @mixin no-click() { 2 | -webkit-user-select: none; 3 | -khtml-user-select: none; 4 | -moz-user-select: none; 5 | -ms-user-select: none; 6 | user-select: none; 7 | } 8 | 9 | @mixin pos-r() { 10 | position: relative; 11 | display: block; 12 | } 13 | 14 | @mixin pos-a() { 15 | position: absolute; 16 | display: block; 17 | } 18 | -------------------------------------------------------------------------------- /inst/www/shared/jqueryui/images/ui-icons_444444_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstudio/shiny/eac0eea88612c26eb78d9cc906b01ad0b2ccb3f5/inst/www/shared/jqueryui/images/ui-icons_444444_256x240.png -------------------------------------------------------------------------------- /inst/www/shared/jqueryui/images/ui-icons_555555_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstudio/shiny/eac0eea88612c26eb78d9cc906b01ad0b2ccb3f5/inst/www/shared/jqueryui/images/ui-icons_555555_256x240.png -------------------------------------------------------------------------------- /inst/www/shared/jqueryui/images/ui-icons_777620_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstudio/shiny/eac0eea88612c26eb78d9cc906b01ad0b2ccb3f5/inst/www/shared/jqueryui/images/ui-icons_777620_256x240.png -------------------------------------------------------------------------------- /inst/www/shared/jqueryui/images/ui-icons_777777_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstudio/shiny/eac0eea88612c26eb78d9cc906b01ad0b2ccb3f5/inst/www/shared/jqueryui/images/ui-icons_777777_256x240.png -------------------------------------------------------------------------------- /inst/www/shared/jqueryui/images/ui-icons_cc0000_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstudio/shiny/eac0eea88612c26eb78d9cc906b01ad0b2ccb3f5/inst/www/shared/jqueryui/images/ui-icons_cc0000_256x240.png -------------------------------------------------------------------------------- /inst/www/shared/jqueryui/images/ui-icons_ffffff_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstudio/shiny/eac0eea88612c26eb78d9cc906b01ad0b2ccb3f5/inst/www/shared/jqueryui/images/ui-icons_ffffff_256x240.png -------------------------------------------------------------------------------- /inst/www/shared/selectize/scss/plugins/auto_position.scss: -------------------------------------------------------------------------------- 1 | .#{selectize}-dropdown.plugin-auto_position.#{$selectize}-position-top { 2 | border-top: 1px solid $select-color-border; 3 | border-bottom: 0 none; 4 | border-radius: 3px 3px 0 0; 5 | box-shadow: 0 -6px 12px rgba(var(--bs-body-color-rgb, 0,0,0), .18); 6 | } 7 | 8 | .#{selectize}-control.plugin-auto_position .#{selectize}-input.#{$selectize}-position-top.dropdown-active { 9 | border-radius: 0 0 3px 3px; 10 | border-top: 0 none; 11 | 12 | &::before { 13 | top: 0; 14 | bottom: unset; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /inst/www/shared/selectize/scss/plugins/clear_button.scss: -------------------------------------------------------------------------------- 1 | .#{$selectize}-control.plugin-clear_button { 2 | .clear { 3 | text-decoration: none; 4 | display: flex; 5 | position: absolute; 6 | height: 100%; 7 | width: 25px; 8 | top: 0; 9 | right: calc(#{$select-padding-x} - #{$select-padding-item-x}); 10 | color: var(--bs-body-color, black); 11 | opacity: 0.4; 12 | font-weight: bold; 13 | border: none; 14 | cursor: pointer; 15 | z-index: 1; 16 | font-size: 21px; 17 | justify-content: center; 18 | align-items: center; 19 | } 20 | 21 | .clear:hover { 22 | opacity: 1; 23 | } 24 | 25 | &.single .clear { 26 | right: calc(#{$select-padding-x} - #{$select-padding-item-x} + 1.5rem); 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /inst/www/shared/selectize/scss/plugins/drag_drop.scss: -------------------------------------------------------------------------------- 1 | .#{$selectize}-control.plugin-drag_drop { 2 | &.multi > .#{$selectize}-input.dragging { 3 | overflow: visible; 4 | } 5 | &.multi > .#{$selectize}-input > div.ui-sortable-placeholder { 6 | visibility: visible !important; 7 | background: #f2f2f2 !important; 8 | background: rgba(0, 0, 0, 0.06) !important; 9 | border: 0 none !important; 10 | box-shadow: inset 0 0 12px 4px #fff; 11 | } 12 | .ui-sortable-placeholder::after { 13 | content: "!"; 14 | visibility: hidden; 15 | } 16 | .ui-sortable-helper { 17 | box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /inst/www/shared/selectize/scss/plugins/dropdown_header.scss: -------------------------------------------------------------------------------- 1 | .#{$selectize}-dropdown.plugin-dropdown_header { 2 | .#{$selectize}-dropdown-header { 3 | position: relative; 4 | padding: ($select-padding-dropdown-item-y * 2) 5 | $select-padding-dropdown-item-x; 6 | border-bottom: 1px solid $select-color-border; 7 | background: RGBA($select-color-dropdown, 0.15); 8 | border-radius: $select-border-radius $select-border-radius 0 0; 9 | } 10 | .#{$selectize}-dropdown-header-close { 11 | position: absolute; 12 | right: $select-padding-dropdown-item-x; 13 | top: 50%; 14 | color: $select-color-text; 15 | opacity: 0.4; 16 | margin-top: -12px; 17 | line-height: 20px; 18 | font-size: 20px !important; 19 | text-decoration: none; 20 | } 21 | .#{$selectize}-dropdown-header-close:hover { 22 | color: RGB($select-color-rgb); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /inst/www/shared/selectize/scss/plugins/optgroup_columns.scss: -------------------------------------------------------------------------------- 1 | .#{$selectize}-dropdown.plugin-optgroup_columns { 2 | .#{$selectize}-dropdown-content { 3 | display: flex; 4 | } 5 | 6 | .optgroup { 7 | border-right: 1px solid #f2f2f2; 8 | border-top: 0 none; 9 | flex-grow: 1; 10 | flex-basis: 0; 11 | min-width: 0; 12 | } 13 | .optgroup:last-child { 14 | border-right: 0 none; 15 | } 16 | .optgroup:before { 17 | display: none; 18 | } 19 | .optgroup-header { 20 | border-top: 0 none; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /inst/www/shared/shiny-autoreload.js: -------------------------------------------------------------------------------- 1 | /*! shiny 1.10.0.9001 | (c) 2012-2025 Posit Software, PBC. | License: GPL-3 | file LICENSE */ 2 | "use strict";(()=>{document.documentElement.classList.add("autoreload-enabled");var c=window.location.protocol==="https:"?"wss:":"ws:",s=window.location.pathname.replace(/\/?$/,"/")+"autoreload/",i=`${c}//${window.location.host}${s}`,l=document.currentScript?.dataset?.wsUrl||i;async function u(o){let e=new WebSocket(o),n=!1;return new Promise((a,r)=>{e.onopen=()=>{n=!0},e.onerror=t=>{r(t)},e.onclose=()=>{n?a(!1):r(new Error("WebSocket connection failed"))},e.onmessage=function(t){t.data==="autoreload"&&a(!0)}})}async function d(o){return new Promise(e=>setTimeout(e,o))}async function w(){for(;;){try{if(await u(l)){window.location.reload();return}}catch{console.debug("Giving up on autoreload");return}await d(1e3)}}w().catch(o=>{console.error(o)});})(); 3 | //# sourceMappingURL=shiny-autoreload.js.map 4 | -------------------------------------------------------------------------------- /inst/www/shared/shiny-testmode.js: -------------------------------------------------------------------------------- 1 | /*! shiny 1.10.0.9001 | (c) 2012-2025 Posit Software, PBC. | License: GPL-3 | file LICENSE */ 2 | "use strict";(()=>{var t=eval;window.addEventListener("message",function(a){let e=a.data;e.code&&t(e.code)});})(); 3 | //# sourceMappingURL=shiny-testmode.js.map 4 | -------------------------------------------------------------------------------- /jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | preset: "ts-jest", 3 | testEnvironment: "jsdom", 4 | }; 5 | -------------------------------------------------------------------------------- /man-roxygen/param-env.R: -------------------------------------------------------------------------------- 1 | # Also update observeEvent param descriptions! 2 | # https://github.com/r-lib/roxygen2/issues/1241 3 | #' @param <%= env %> The parent environment for the reactive expression. By default, 4 | #' this is the calling environment, the same as when defining an ordinary 5 | #' non-reactive expression. If `<%= x %>` is a quosure and `<%= quoted %>` is `TRUE`, 6 | #' then `<%= env %>` is ignored. 7 | -------------------------------------------------------------------------------- /man-roxygen/param-quoted.R: -------------------------------------------------------------------------------- 1 | # Also update observeEvent param descriptions! 2 | # https://github.com/r-lib/roxygen2/issues/1241 3 | #' @param <%= quoted %> If it is `TRUE`, then the [`quote()`]ed value of `<%= x %>` 4 | #' will be used when `<%= x %>` is evaluated. If `<%= x %>` is a quosure and you 5 | #' would like to use its expression as a value for `<%= x %>`, then you must set 6 | #' `<%= quoted %>` to `TRUE`. 7 | -------------------------------------------------------------------------------- /man/figures/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstudio/shiny/eac0eea88612c26eb78d9cc906b01ad0b2ccb3f5/man/figures/logo.png -------------------------------------------------------------------------------- /man/headerPanel.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/bootstrap-deprecated.R 3 | \name{headerPanel} 4 | \alias{headerPanel} 5 | \title{Create a header panel} 6 | \usage{ 7 | headerPanel(title, windowTitle = title) 8 | } 9 | \arguments{ 10 | \item{title}{An application title to display} 11 | 12 | \item{windowTitle}{The title that should be displayed by the browser window. 13 | Useful if \code{title} is not a string.} 14 | } 15 | \value{ 16 | A headerPanel that can be passed to \link{pageWithSidebar} 17 | } 18 | \description{ 19 | \strong{DEPRECATED}: use \code{\link[=titlePanel]{titlePanel()}} instead. 20 | } 21 | \keyword{internal} 22 | -------------------------------------------------------------------------------- /man/helpText.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/bootstrap.R 3 | \name{helpText} 4 | \alias{helpText} 5 | \title{Create a help text element} 6 | \usage{ 7 | helpText(...) 8 | } 9 | \arguments{ 10 | \item{...}{One or more help text strings (or other inline HTML elements)} 11 | } 12 | \value{ 13 | A help text element that can be added to a UI definition. 14 | } 15 | \description{ 16 | Create help text which can be added to an input form to provide additional 17 | explanation or context. 18 | } 19 | \examples{ 20 | helpText("Note: while the data view will show only", 21 | "the specified number of observations, the", 22 | "summary will be based on the full dataset.") 23 | } 24 | -------------------------------------------------------------------------------- /man/inputPanel.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/bootstrap-layout.R 3 | \name{inputPanel} 4 | \alias{inputPanel} 5 | \title{Input panel} 6 | \usage{ 7 | inputPanel(...) 8 | } 9 | \arguments{ 10 | \item{...}{Input controls or other HTML elements.} 11 | } 12 | \description{ 13 | A \code{\link[=flowLayout]{flowLayout()}} with a grey border and light grey background, 14 | suitable for wrapping inputs. 15 | } 16 | -------------------------------------------------------------------------------- /man/is.reactivevalues.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/reactives.R 3 | \name{is.reactivevalues} 4 | \alias{is.reactivevalues} 5 | \title{Checks whether an object is a reactivevalues object} 6 | \usage{ 7 | is.reactivevalues(x) 8 | } 9 | \arguments{ 10 | \item{x}{The object to test.} 11 | } 12 | \description{ 13 | Checks whether its argument is a reactivevalues object. 14 | } 15 | \seealso{ 16 | \code{\link[=reactiveValues]{reactiveValues()}}. 17 | } 18 | -------------------------------------------------------------------------------- /man/isRunning.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/server.R 3 | \name{isRunning} 4 | \alias{isRunning} 5 | \title{Check whether a Shiny application is running} 6 | \usage{ 7 | isRunning() 8 | } 9 | \value{ 10 | \code{TRUE} if a Shiny application is currently running. Otherwise, 11 | \code{FALSE}. 12 | } 13 | \description{ 14 | This function tests whether a Shiny application is currently running. 15 | } 16 | -------------------------------------------------------------------------------- /man/knitr_methods.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/knitr.R 3 | \name{knitr_methods} 4 | \alias{knitr_methods} 5 | \alias{knit_print.shiny.appobj} 6 | \alias{knit_print.shiny.render.function} 7 | \alias{knit_print.reactive} 8 | \title{Knitr S3 methods} 9 | \usage{ 10 | knit_print.shiny.appobj(x, ...) 11 | 12 | knit_print.shiny.render.function(x, ..., inline = FALSE) 13 | 14 | knit_print.reactive(x, ..., inline = FALSE) 15 | } 16 | \arguments{ 17 | \item{x}{Object to knit_print} 18 | 19 | \item{...}{Additional knit_print arguments} 20 | 21 | \item{inline}{Whether the object is printed inline.} 22 | } 23 | \description{ 24 | These S3 methods are necessary to help Shiny applications and UI chunks embed 25 | themselves in knitr/rmarkdown documents. 26 | } 27 | \keyword{internal} 28 | -------------------------------------------------------------------------------- /man/markOutputAttrs.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/shinywrappers.R 3 | \name{markOutputAttrs} 4 | \alias{markOutputAttrs} 5 | \title{Mark a render function with attributes that will be used by the output} 6 | \usage{ 7 | markOutputAttrs(renderFunc, snapshotExclude = NULL, snapshotPreprocess = NULL) 8 | } 9 | \arguments{ 10 | \item{renderFunc}{A function that is suitable for assigning to a Shiny output 11 | slot.} 12 | 13 | \item{snapshotExclude}{If TRUE, exclude the output from test snapshots.} 14 | 15 | \item{snapshotPreprocess}{A function for preprocessing the value before 16 | taking a test snapshot.} 17 | } 18 | \description{ 19 | Mark a render function with attributes that will be used by the output 20 | } 21 | \keyword{internal} 22 | -------------------------------------------------------------------------------- /man/maskReactiveContext.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/reactives.R 3 | \name{maskReactiveContext} 4 | \alias{maskReactiveContext} 5 | \title{Evaluate an expression without a reactive context} 6 | \usage{ 7 | maskReactiveContext(expr) 8 | } 9 | \arguments{ 10 | \item{expr}{An expression to evaluate.} 11 | } 12 | \value{ 13 | The value of \code{expr}. 14 | } 15 | \description{ 16 | Temporarily blocks the current reactive context and evaluates the given 17 | expression. Any attempt to directly access reactive values or expressions in 18 | \code{expr} will give the same results as doing it at the top-level (by 19 | default, an error). 20 | } 21 | \seealso{ 22 | \code{\link[=isolate]{isolate()}} 23 | } 24 | -------------------------------------------------------------------------------- /man/pageWithSidebar.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/bootstrap-deprecated.R 3 | \name{pageWithSidebar} 4 | \alias{pageWithSidebar} 5 | \title{Create a page with a sidebar} 6 | \usage{ 7 | pageWithSidebar(headerPanel, sidebarPanel, mainPanel) 8 | } 9 | \arguments{ 10 | \item{headerPanel}{The \link{headerPanel} with the application title} 11 | 12 | \item{sidebarPanel}{The \link{sidebarPanel} containing input controls} 13 | 14 | \item{mainPanel}{The \link{mainPanel} containing outputs} 15 | } 16 | \value{ 17 | A UI definition that can be passed to the \link{shinyUI} function 18 | } 19 | \description{ 20 | \strong{DEPRECATED}: use \code{\link[=fluidPage]{fluidPage()}} and \code{\link[=sidebarLayout]{sidebarLayout()}} instead. 21 | } 22 | \keyword{internal} 23 | -------------------------------------------------------------------------------- /man/reactiveConsole.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/reactives.R 3 | \name{reactiveConsole} 4 | \alias{reactiveConsole} 5 | \title{Activate reactivity in the console} 6 | \usage{ 7 | reactiveConsole(enabled) 8 | } 9 | \arguments{ 10 | \item{enabled}{Turn console reactivity on or off?} 11 | } 12 | \description{ 13 | This is an experimental feature that allows you to enable reactivity 14 | at the console, for the purposes of experimentation and learning. 15 | } 16 | \examples{ 17 | reactiveConsole(TRUE) 18 | x <- reactiveVal(10) 19 | y <- observe({ 20 | message("The value of x is ", x()) 21 | }) 22 | x(20) 23 | x(30) 24 | reactiveConsole(FALSE) 25 | } 26 | \keyword{internal} 27 | -------------------------------------------------------------------------------- /man/removeInputHandler.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/server-input-handlers.R 3 | \name{removeInputHandler} 4 | \alias{removeInputHandler} 5 | \title{Deregister an Input Handler} 6 | \usage{ 7 | removeInputHandler(type) 8 | } 9 | \arguments{ 10 | \item{type}{The type for which handlers should be removed.} 11 | } 12 | \value{ 13 | The handler previously associated with this \code{type}, if one 14 | existed. Otherwise, \code{NULL}. 15 | } 16 | \description{ 17 | Removes an Input Handler. Rather than using the previously specified handler 18 | for data of this type, the default jsonlite serialization will be used. 19 | } 20 | \seealso{ 21 | \code{\link[=registerInputHandler]{registerInputHandler()}} 22 | } 23 | -------------------------------------------------------------------------------- /man/restoreInput.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/bookmark-state.R 3 | \name{restoreInput} 4 | \alias{restoreInput} 5 | \title{Restore an input value} 6 | \usage{ 7 | restoreInput(id, default) 8 | } 9 | \arguments{ 10 | \item{id}{Name of the input value to restore.} 11 | 12 | \item{default}{A default value to use, if there's no value to restore.} 13 | } 14 | \description{ 15 | This restores an input value from the current restore context. It should be 16 | called early on inside of input functions (like \code{\link[=textInput]{textInput()}}). 17 | } 18 | -------------------------------------------------------------------------------- /man/serverInfo.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/utils.R 3 | \name{serverInfo} 4 | \alias{serverInfo} 5 | \title{Collect information about the Shiny Server environment} 6 | \usage{ 7 | serverInfo() 8 | } 9 | \value{ 10 | A list of the Shiny Server information. 11 | } 12 | \description{ 13 | This function returns the information about the current Shiny Server, such as 14 | its version, and whether it is the open source edition or professional 15 | edition. If the app is not served through the Shiny Server, this function 16 | just returns \code{list(shinyServer = FALSE)}. 17 | } 18 | \details{ 19 | This function will only return meaningful data when using Shiny Server 20 | version 1.2.2 or later. 21 | } 22 | -------------------------------------------------------------------------------- /man/setSerializer.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/serializers.R 3 | \name{setSerializer} 4 | \alias{setSerializer} 5 | \title{Add a function for serializing an input before bookmarking application state} 6 | \usage{ 7 | setSerializer(inputId, fun, session = getDefaultReactiveDomain()) 8 | } 9 | \arguments{ 10 | \item{inputId}{Name of the input value.} 11 | 12 | \item{fun}{A function that takes the input value and returns a modified 13 | value. The returned value will be used for the test snapshot.} 14 | 15 | \item{session}{A Shiny session object.} 16 | } 17 | \description{ 18 | Add a function for serializing an input before bookmarking application state 19 | } 20 | -------------------------------------------------------------------------------- /man/shiny.appobj.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/shinyapp.R 3 | \name{shiny.appobj} 4 | \alias{shiny.appobj} 5 | \alias{as.shiny.appobj} 6 | \alias{as.shiny.appobj.shiny.appobj} 7 | \alias{as.shiny.appobj.list} 8 | \alias{as.shiny.appobj.character} 9 | \alias{is.shiny.appobj} 10 | \alias{print.shiny.appobj} 11 | \alias{as.tags.shiny.appobj} 12 | \title{Shiny App object} 13 | \usage{ 14 | as.shiny.appobj(x) 15 | 16 | \method{as.shiny.appobj}{shiny.appobj}(x) 17 | 18 | \method{as.shiny.appobj}{list}(x) 19 | 20 | \method{as.shiny.appobj}{character}(x) 21 | 22 | is.shiny.appobj(x) 23 | 24 | \method{print}{shiny.appobj}(x, ...) 25 | 26 | \method{as.tags}{shiny.appobj}(x, ...) 27 | } 28 | \arguments{ 29 | \item{x}{Object to convert to a Shiny app.} 30 | 31 | \item{...}{Ignored.} 32 | } 33 | \description{ 34 | Internal methods for the \code{shiny.appobj} S3 class. 35 | } 36 | \keyword{internal} 37 | -------------------------------------------------------------------------------- /man/shinyDeprecated.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/deprecated.R 3 | \name{shinyDeprecated} 4 | \alias{shinyDeprecated} 5 | \title{Print message for deprecated functions in Shiny} 6 | \usage{ 7 | shinyDeprecated( 8 | version, 9 | what, 10 | with = NULL, 11 | details = NULL, 12 | type = c("deprecated", "superseded") 13 | ) 14 | } 15 | \arguments{ 16 | \item{version}{Shiny version when the function was deprecated} 17 | 18 | \item{what}{Function with possible arguments} 19 | 20 | \item{with}{Possible function with arguments that should be used instead} 21 | 22 | \item{details}{Additional information to be added after a new line to the displayed message} 23 | } 24 | \description{ 25 | To disable these messages, use \code{options(shiny.deprecation.messages=FALSE)}. 26 | } 27 | \keyword{internal} 28 | -------------------------------------------------------------------------------- /man/showBookmarkUrlModal.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/bookmark-state.R 3 | \name{showBookmarkUrlModal} 4 | \alias{showBookmarkUrlModal} 5 | \title{Display a modal dialog for bookmarking} 6 | \usage{ 7 | showBookmarkUrlModal(url) 8 | } 9 | \arguments{ 10 | \item{url}{A URL to show in the modal dialog.} 11 | } 12 | \description{ 13 | This is a wrapper function for \code{\link[=urlModal]{urlModal()}} that is automatically 14 | called if an application is bookmarked but no other \code{\link[=onBookmark]{onBookmark()}} 15 | callback was set. It displays a modal dialog with the bookmark URL, along 16 | with a subtitle that is appropriate for the type of bookmarking used ("url" 17 | or "server"). 18 | } 19 | -------------------------------------------------------------------------------- /man/showModal.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/modal.R 3 | \name{showModal} 4 | \alias{showModal} 5 | \alias{removeModal} 6 | \title{Show or remove a modal dialog} 7 | \usage{ 8 | showModal(ui, session = getDefaultReactiveDomain()) 9 | 10 | removeModal(session = getDefaultReactiveDomain()) 11 | } 12 | \arguments{ 13 | \item{ui}{UI content to show in the modal.} 14 | 15 | \item{session}{The \code{session} object passed to function given to 16 | \code{shinyServer}.} 17 | } 18 | \description{ 19 | This causes a modal dialog to be displayed in the client browser, and is 20 | typically used with \code{\link[=modalDialog]{modalDialog()}}. 21 | } 22 | \seealso{ 23 | \code{\link[=modalDialog]{modalDialog()}} for examples. 24 | } 25 | -------------------------------------------------------------------------------- /man/snapshotExclude.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/snapshot.R 3 | \name{snapshotExclude} 4 | \alias{snapshotExclude} 5 | \title{Mark an output to be excluded from test snapshots} 6 | \usage{ 7 | snapshotExclude(x) 8 | } 9 | \arguments{ 10 | \item{x}{A reactive which will be assigned to an output.} 11 | } 12 | \description{ 13 | Mark an output to be excluded from test snapshots 14 | } 15 | -------------------------------------------------------------------------------- /man/snapshotPreprocessInput.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/snapshot.R 3 | \name{snapshotPreprocessInput} 4 | \alias{snapshotPreprocessInput} 5 | \title{Add a function for preprocessing an input before taking a test snapshot} 6 | \usage{ 7 | snapshotPreprocessInput(inputId, fun, session = getDefaultReactiveDomain()) 8 | } 9 | \arguments{ 10 | \item{inputId}{Name of the input value.} 11 | 12 | \item{fun}{A function that takes the input value and returns a modified 13 | value. The returned value will be used for the test snapshot.} 14 | 15 | \item{session}{A Shiny session object.} 16 | } 17 | \description{ 18 | Add a function for preprocessing an input before taking a test snapshot 19 | } 20 | -------------------------------------------------------------------------------- /man/snapshotPreprocessOutput.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/snapshot.R 3 | \name{snapshotPreprocessOutput} 4 | \alias{snapshotPreprocessOutput} 5 | \title{Add a function for preprocessing an output before taking a test snapshot} 6 | \usage{ 7 | snapshotPreprocessOutput(x, fun) 8 | } 9 | \arguments{ 10 | \item{x}{A reactive which will be assigned to an output.} 11 | 12 | \item{fun}{A function that takes the output value as an input and returns a 13 | modified value. The returned value will be used for the test snapshot.} 14 | } 15 | \description{ 16 | Add a function for preprocessing an output before taking a test snapshot 17 | } 18 | -------------------------------------------------------------------------------- /man/stopApp.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/runapp.R 3 | \name{stopApp} 4 | \alias{stopApp} 5 | \title{Stop the currently running Shiny app} 6 | \usage{ 7 | stopApp(returnValue = invisible()) 8 | } 9 | \arguments{ 10 | \item{returnValue}{The value that should be returned from 11 | \code{\link[=runApp]{runApp()}}.} 12 | } 13 | \description{ 14 | Stops the currently running Shiny app, returning control to the caller of 15 | \code{\link[=runApp]{runApp()}}. 16 | } 17 | -------------------------------------------------------------------------------- /man/urlModal.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/bookmark-state.R 3 | \name{urlModal} 4 | \alias{urlModal} 5 | \title{Generate a modal dialog that displays a URL} 6 | \usage{ 7 | urlModal(url, title = "Bookmarked application link", subtitle = NULL) 8 | } 9 | \arguments{ 10 | \item{url}{A URL to display in the dialog box.} 11 | 12 | \item{title}{A title for the dialog box.} 13 | 14 | \item{subtitle}{Text to display underneath URL.} 15 | } 16 | \description{ 17 | The modal dialog generated by \code{urlModal} will display the URL in a 18 | textarea input, and the URL text will be selected so that it can be easily 19 | copied. The result from \code{urlModal} should be passed to the 20 | \code{\link[=showModal]{showModal()}} function to display it in the browser. 21 | } 22 | -------------------------------------------------------------------------------- /man/wellPanel.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/bootstrap.R 3 | \name{wellPanel} 4 | \alias{wellPanel} 5 | \title{Create a well panel} 6 | \usage{ 7 | wellPanel(...) 8 | } 9 | \arguments{ 10 | \item{...}{UI elements to include inside the panel.} 11 | } 12 | \value{ 13 | The newly created panel. 14 | } 15 | \description{ 16 | Creates a panel with a slightly inset border and grey background. Equivalent 17 | to Bootstrap's \code{well} CSS class. 18 | } 19 | -------------------------------------------------------------------------------- /man/withMathJax.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/shinyui.R 3 | \name{withMathJax} 4 | \alias{withMathJax} 5 | \title{Load the MathJax library and typeset math expressions} 6 | \usage{ 7 | withMathJax(...) 8 | } 9 | \arguments{ 10 | \item{...}{any HTML elements to apply MathJax to} 11 | } 12 | \description{ 13 | This function adds MathJax to the page and typeset the math expressions (if 14 | found) in the content \code{...}. It only needs to be called once in an app 15 | unless the content is rendered \emph{after} the page is loaded, e.g. via 16 | \code{\link[=renderUI]{renderUI()}}, in which case we have to call it explicitly every 17 | time we write math expressions to the output. 18 | } 19 | \examples{ 20 | withMathJax(helpText("Some math here $$\\\\alpha+\\\\beta$$")) 21 | # now we can just write "static" content without withMathJax() 22 | div("more math here $$\\\\sqrt{2}$$") 23 | } 24 | -------------------------------------------------------------------------------- /revdep/.gitignore: -------------------------------------------------------------------------------- 1 | *.noindex* 2 | data.sqlite 3 | failures.md 4 | -------------------------------------------------------------------------------- /revdep/revdep_cran.md: -------------------------------------------------------------------------------- 1 | ## revdepcheck results 2 | 3 | We checked 902 reverse dependencies (778 from CRAN + 124 from BioConductor), comparing R CMD check results across CRAN and dev versions of this package. 4 | 5 | * We saw 1 new problems 6 | * We failed to check 2 packages 7 | 8 | Issues with CRAN packages are summarised below. 9 | 10 | ### New problems 11 | (This reports the first line of each new failure) 12 | 13 | * bsplus 14 | checking tests ... 15 | 16 | * Notified on May 11, 2020 17 | * PR: https://github.com/ijlyttle/bsplus/pull/74 18 | * Merged: May 12, 2020 19 | 20 | 21 | ### Failed to check 22 | 23 | * frailtypack 24 | * I can not figure out a way to install from source on macOS 25 | 26 | * skeleSim 27 | * Error: object ‘strata<-’ is not exported by 'namespace:strataG' 28 | * False positive 29 | -------------------------------------------------------------------------------- /shiny.Rproj: -------------------------------------------------------------------------------- 1 | Version: 1.0 2 | 3 | RestoreWorkspace: No 4 | SaveWorkspace: No 5 | AlwaysSaveHistory: Default 6 | 7 | EnableCodeIndexing: Yes 8 | UseSpacesForTab: Yes 9 | NumSpacesForTab: 2 10 | Encoding: UTF-8 11 | 12 | RnwWeave: knitr 13 | LaTeX: pdfLaTeX 14 | 15 | AutoAppendNewline: Yes 16 | StripTrailingWhitespace: Yes 17 | 18 | BuildType: Package 19 | PackageUseDevtools: Yes 20 | PackageInstallArgs: --with-keep.source --no-byte-compile 21 | PackageCheckArgs: --as-cran --no-manual --run-donttest 22 | PackageRoxygenize: rd,collate,namespace 23 | -------------------------------------------------------------------------------- /smoketests/.gitignore: -------------------------------------------------------------------------------- 1 | output 2 | -------------------------------------------------------------------------------- /smoketests/snapshot.R: -------------------------------------------------------------------------------- 1 | source("functions.R") 2 | 3 | for (dir in appdirs()) { 4 | snapshotPath <- file.path(dir, "R.out.save") 5 | if (upToDate(dir, "R.out.save")) 6 | next 7 | 8 | cat("Snapshotting", dir, "\n") 9 | res <- executeApp(dir) 10 | writeLines(res, snapshotPath) 11 | } 12 | 13 | invisible() 14 | -------------------------------------------------------------------------------- /smoketests/stacktrace1/R.out.save: -------------------------------------------------------------------------------- 1 | Loading required package: shiny 2 | Loading required package: methods 3 | 4 | Listening on http://127.0.0.1:8765 5 | Warning: Error in badfunc: boom 6 | Stack trace (innermost first): 7 | 113: badfunc [${PWD}/stacktrace1/app.R#4] 8 | 112: reactive A [${PWD}/stacktrace1/app.R#8] 9 | 101: A [${SHINY}/R/reactives.R#376] 10 | 100: reactive B [${PWD}/stacktrace1/app.R#12] 11 | 89: B [${SHINY}/R/reactives.R#376] 12 | 88: reactive C [${PWD}/stacktrace1/app.R#16] 13 | 77: C [${SHINY}/R/reactives.R#376] 14 | 76: renderPlot [${PWD}/stacktrace1/app.R#27] 15 | 68: output$foo [${SHINY}/R/render-plot.R#111] 16 | 1: shiny::runApp [${SHINY}/R/server.R#685] 17 | NULL 18 | -------------------------------------------------------------------------------- /smoketests/stacktrace1/app.R: -------------------------------------------------------------------------------- 1 | library(shiny) 2 | 3 | badfunc <- function() { 4 | stop("boom") 5 | } 6 | 7 | A <- reactive({ 8 | badfunc() 9 | }) 10 | 11 | B <- reactive({ 12 | A() 13 | }) 14 | 15 | C <- reactive({ 16 | B() 17 | }) 18 | 19 | ui <- fluidPage( 20 | plotOutput("foo") 21 | ) 22 | 23 | server <- function(input, output, session) { 24 | session$onFlushed(stopApp) 25 | 26 | output$foo <- renderPlot({ 27 | C() 28 | }) 29 | } 30 | 31 | shinyApp(ui, server) 32 | -------------------------------------------------------------------------------- /smoketests/stacktrace2/app.R: -------------------------------------------------------------------------------- 1 | library(shiny) 2 | 3 | badfunc <- function() { 4 | stop("boom") 5 | } 6 | 7 | A <- reactive({ 8 | badfunc() 9 | }) 10 | 11 | B <- reactive({ 12 | A() 13 | }) 14 | 15 | C <- reactive({ 16 | B() 17 | }) 18 | 19 | ui <- fluidPage( 20 | textOutput("foo"), 21 | dataTableOutput("bar") 22 | ) 23 | 24 | server <- function(input, output, session) { 25 | session$onFlushed(stopApp) 26 | 27 | output$foo <- renderText({ 28 | C() 29 | }) 30 | output$bar <- renderDataTable({ 31 | C() 32 | }) 33 | } 34 | 35 | shinyApp(ui, server) 36 | -------------------------------------------------------------------------------- /smoketests/stacktrace3/R.out.save: -------------------------------------------------------------------------------- 1 | Loading required package: shiny 2 | Loading required package: methods 3 | 4 | Listening on http://127.0.0.1:8765 5 | Warning: Error in badfunc: boom 6 | Stack trace (innermost first): 7 | 41: badfunc [${PWD}/stacktrace3/app.R#4] 8 | 40: server [${PWD}/stacktrace3/app.R#12] 9 | 1: shiny::runApp [${SHINY}/R/server.R#685] 10 | Error in badfunc() : boom 11 | NULL 12 | -------------------------------------------------------------------------------- /smoketests/stacktrace3/app.R: -------------------------------------------------------------------------------- 1 | library(shiny) 2 | 3 | badfunc <- function() { 4 | stop("boom") 5 | } 6 | 7 | ui <- fluidPage( 8 | ) 9 | 10 | server <- function(input, output, session) { 11 | on.exit(stopApp()) 12 | badfunc() 13 | } 14 | 15 | shinyApp(ui, server) 16 | -------------------------------------------------------------------------------- /smoketests/stacktrace4/R.out.save: -------------------------------------------------------------------------------- 1 | Loading required package: shiny 2 | Loading required package: methods 3 | 4 | Listening on http://127.0.0.1:8765 5 | Warning: Error in badfunc: boom 6 | Stack trace (innermost first): 7 | 37: badfunc [${PWD}/stacktrace4/app.R#4] 8 | 36: ui [${PWD}/stacktrace4/app.R#9] 9 | 1: shiny::runApp [${SHINY}/R/server.R#685] 10 | Error in badfunc() : boom 11 | NULL 12 | -------------------------------------------------------------------------------- /smoketests/stacktrace4/app.R: -------------------------------------------------------------------------------- 1 | library(shiny) 2 | 3 | badfunc <- function() { 4 | stop("boom") 5 | } 6 | 7 | ui <- function(req) { 8 | stopApp() 9 | badfunc() 10 | } 11 | 12 | server <- function(input, output, session) { 13 | on.exit(stopApp()) 14 | badfunc() 15 | } 16 | 17 | shinyApp(ui, server) 18 | -------------------------------------------------------------------------------- /smoketests/stacktrace5/R.out.save: -------------------------------------------------------------------------------- 1 | Loading required package: shiny 2 | Loading required package: methods 3 | 4 | Listening on http://127.0.0.1:8765 5 | Warning: Error in badservercall: server boom 6 | Stack trace (innermost first): 7 | 41: badservercall [${PWD}/stacktrace5/server.R#4] 8 | 40: server [${PWD}/stacktrace5/server.R#9] 9 | 1: shiny::runApp [${SHINY}/R/server.R#685] 10 | Error in badservercall() : server boom 11 | NULL 12 | -------------------------------------------------------------------------------- /smoketests/stacktrace5/server.R: -------------------------------------------------------------------------------- 1 | library(shiny) 2 | 3 | badservercall <- function() { 4 | stop("server boom") 5 | } 6 | 7 | function(input, output, session) { 8 | on.exit(stopApp()) 9 | badservercall() 10 | } 11 | -------------------------------------------------------------------------------- /smoketests/stacktrace5/ui.R: -------------------------------------------------------------------------------- 1 | library(shiny) 2 | 3 | ui <- fluidPage( 4 | ) 5 | -------------------------------------------------------------------------------- /smoketests/stacktrace6/R.out.save: -------------------------------------------------------------------------------- 1 | Loading required package: shiny 2 | Loading required package: methods 3 | 4 | Listening on http://127.0.0.1:8765 5 | Warning: Error in baduicall: ui boom 6 | Stack trace (innermost first): 7 | 51: baduicall [${PWD}/stacktrace6/ui.R#5] 8 | 50: tag 9 | 49: tags$div 10 | 48: div 11 | 47: wellPanel [${SHINY}/R/bootstrap.R#320] 12 | 46: tag 13 | 45: tags$div 14 | 44: div 15 | 43: tagList 16 | 42: attachDependencies 17 | 41: bootstrapPage [${SHINY}/R/bootstrap.R#56] 18 | 40: fluidPage [${SHINY}/R/bootstrap-layout.R#72] 19 | 1: shiny::runApp [${SHINY}/R/server.R#685] 20 | Error in baduicall() : ui boom 21 | NULL 22 | -------------------------------------------------------------------------------- /smoketests/stacktrace6/server.R: -------------------------------------------------------------------------------- 1 | library(shiny) 2 | 3 | function(input, output, session) { 4 | } 5 | -------------------------------------------------------------------------------- /smoketests/stacktrace6/ui.R: -------------------------------------------------------------------------------- 1 | library(shiny) 2 | 3 | baduicall <- function() { 4 | stopApp() 5 | stop("ui boom") 6 | } 7 | 8 | ui <- fluidPage( 9 | wellPanel(baduicall()) 10 | ) 11 | -------------------------------------------------------------------------------- /smoketests/test.R: -------------------------------------------------------------------------------- 1 | source("functions.R") 2 | 3 | options(warn = 1) 4 | 5 | failures <- 0 6 | for (dir in appdirs()) { 7 | cat("Testing", dir, "\n") 8 | 9 | snapshotPath <- file.path(dir, "R.out.save") 10 | if (!upToDate(dir, "R.out.save")) { 11 | warning(dir, " snapshot may be out of date") 12 | } 13 | 14 | res <- executeApp(dir) 15 | if (!identical(readLines(snapshotPath), res)) { 16 | resultPath <- file.path("output", dir, "R.out") 17 | dir.create(dirname(resultPath), showWarnings = FALSE, recursive = TRUE, mode = "0775") 18 | writeLines(res, resultPath) 19 | message("Results differ! Writing output to ", resultPath) 20 | failures <- failures + 1 21 | } 22 | } 23 | 24 | if (failures) { 25 | cat(file = stderr(), paste0("--\n", failures, " test(s) failed\n")) 26 | q("no", status = 1) 27 | } 28 | -------------------------------------------------------------------------------- /smoketests/visit.js: -------------------------------------------------------------------------------- 1 | var page = require('webpage').create(); 2 | setTimeout(function() { 3 | page.open('http://localhost:8765', function(status) { 4 | setTimeout(function() { 5 | phantom.exit(); 6 | }, 1000); 7 | }); 8 | }, 1000); 9 | -------------------------------------------------------------------------------- /srcts/build/external_libs_tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES5", 4 | "alwaysStrict": false 5 | } 6 | } -------------------------------------------------------------------------------- /srcts/extras/globalShiny.ts: -------------------------------------------------------------------------------- 1 | // Type definitions for @types-rstudio/shiny 2 | // Project: Shiny 3 | // Definitions by: RStudio 4 | 5 | import type { ShinyClass } from "../src/shiny/index"; 6 | 7 | declare global { 8 | // Tell window.Shiny exists 9 | interface Window { 10 | // eslint-disable-next-line @typescript-eslint/naming-convention 11 | Shiny: ShinyClass; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /srcts/extras/shiny-testmode.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable unicorn/filename-case */ 2 | import { indirectEval } from "../src/utils/eval"; 3 | 4 | // Listen for messages from parent frame. This file is only added when the 5 | // shiny.testmode option is TRUE. 6 | window.addEventListener("message", function (e: { data: { code: string } }) { 7 | const message = e.data; 8 | 9 | if (message.code) indirectEval(message.code); 10 | }); 11 | -------------------------------------------------------------------------------- /srcts/src/bindings/index.ts: -------------------------------------------------------------------------------- 1 | import { InputBinding } from "./input"; 2 | import { OutputBinding } from "./output"; 3 | 4 | export { InputBinding, OutputBinding }; 5 | -------------------------------------------------------------------------------- /srcts/src/bindings/input/password.ts: -------------------------------------------------------------------------------- 1 | import $ from "jquery"; 2 | 3 | import { TextInputBinding } from "./text"; 4 | 5 | class PasswordInputBinding extends TextInputBinding { 6 | find(scope: HTMLElement): JQuery { 7 | // Inputs also have .shiny-input-password class 8 | return $(scope).find('input[type="password"]'); 9 | } 10 | 11 | getType(el: HTMLElement): string { 12 | return "shiny.password"; 13 | el; 14 | } 15 | } 16 | 17 | export { PasswordInputBinding }; 18 | -------------------------------------------------------------------------------- /srcts/src/bindings/output/html.ts: -------------------------------------------------------------------------------- 1 | import $ from "jquery"; 2 | 3 | import { shinyUnbindAll } from "../../shiny/initedMethods"; 4 | import { renderContentAsync } from "../../shiny/render"; 5 | import type { ErrorsMessageValue } from "../../shiny/shinyapp"; 6 | import { OutputBinding } from "./outputBinding"; 7 | 8 | class HtmlOutputBinding extends OutputBinding { 9 | find(scope: HTMLElement): JQuery { 10 | return $(scope).find(".shiny-html-output"); 11 | } 12 | onValueError(el: HTMLElement, err: ErrorsMessageValue): void { 13 | shinyUnbindAll(el); 14 | this.renderError(el, err); 15 | } 16 | override async renderValue( 17 | el: HTMLElement, 18 | data: Parameters[1] 19 | ): Promise { 20 | await renderContentAsync(el, data); 21 | } 22 | } 23 | 24 | export { HtmlOutputBinding }; 25 | -------------------------------------------------------------------------------- /srcts/src/bindings/output/text.ts: -------------------------------------------------------------------------------- 1 | import $ from "jquery"; 2 | import { OutputBinding } from "./outputBinding"; 3 | 4 | class TextOutputBinding extends OutputBinding { 5 | find(scope: HTMLElement): JQuery { 6 | return $(scope).find(".shiny-text-output"); 7 | } 8 | renderValue(el: HTMLElement, data: boolean | number | string): void { 9 | $(el).text(data); 10 | } 11 | } 12 | 13 | export { TextOutputBinding }; 14 | -------------------------------------------------------------------------------- /srcts/src/events/inputChanged.ts: -------------------------------------------------------------------------------- 1 | import $ from "jquery"; 2 | import type { FileInputBinding } from "../bindings/input/fileinput"; 3 | import type { ShinyEventInputChanged } from "./shinyEvents"; 4 | 5 | function triggerFileInputChanged( 6 | name: string, 7 | value: unknown, 8 | binding: FileInputBinding, 9 | el: HTMLElement, 10 | inputType: string, 11 | onEl: typeof document 12 | ): ShinyEventInputChanged { 13 | const evt = $.Event("shiny:inputchanged") as ShinyEventInputChanged; 14 | 15 | evt.name = name; 16 | evt.value = value; 17 | evt.binding = binding; 18 | evt.el = el; 19 | evt.inputType = inputType; 20 | 21 | $(onEl).trigger(evt); 22 | 23 | return evt; 24 | } 25 | 26 | export { triggerFileInputChanged }; 27 | -------------------------------------------------------------------------------- /srcts/src/imageutils/disableDrag.ts: -------------------------------------------------------------------------------- 1 | function disableDrag( 2 | $el: JQuery, 3 | $img: JQuery 4 | ): void { 5 | // Make image non-draggable (Chrome, Safari) 6 | $img.css("-webkit-user-drag", "none"); 7 | 8 | // Firefox, IE<=10 9 | // First remove existing handler so we don't keep adding handlers. 10 | $img.off("dragstart.image_output"); 11 | $img.on("dragstart.image_output", function () { 12 | return false; 13 | }); 14 | 15 | // Disable selection of image and text when dragging in IE<=10 16 | $el.off("selectstart.image_output"); 17 | $el.on("selectstart.image_output", function () { 18 | return false; 19 | }); 20 | } 21 | 22 | export { disableDrag }; 23 | -------------------------------------------------------------------------------- /srcts/src/imageutils/findbox.ts: -------------------------------------------------------------------------------- 1 | // Given two sets of x/y coordinates, return an object representing the min 2 | // and max x and y values. (This could be generalized to any number of 3 | 4 | import type { Bounds } from "./createBrush"; 5 | 6 | type Offset = { 7 | x: number; 8 | y: number; 9 | }; 10 | 11 | // points). 12 | function findBox(offset1: Offset, offset2: Offset): Bounds { 13 | return { 14 | xmin: Math.min(offset1.x, offset2.x), 15 | xmax: Math.max(offset1.x, offset2.x), 16 | ymin: Math.min(offset1.y, offset2.y), 17 | ymax: Math.max(offset1.y, offset2.y), 18 | }; 19 | } 20 | 21 | export type { Offset }; 22 | export { findBox }; 23 | -------------------------------------------------------------------------------- /srcts/src/imageutils/index.ts: -------------------------------------------------------------------------------- 1 | import { createBrush } from "./createBrush"; 2 | import { createClickInfo } from "./createClickInfo"; 3 | import { 4 | createBrushHandler, 5 | createClickHandler, 6 | createHoverHandler, 7 | } from "./createHandlers"; 8 | import { disableDrag } from "./disableDrag"; 9 | import { findBox } from "./findbox"; 10 | import { initCoordmap } from "./initCoordmap"; 11 | import { initPanelScales } from "./initPanelScales"; 12 | import { shiftToRange } from "./shiftToRange"; 13 | 14 | export { 15 | disableDrag, 16 | initPanelScales, 17 | initCoordmap, 18 | findBox, 19 | shiftToRange, 20 | createClickInfo, 21 | createClickHandler, 22 | createHoverHandler, 23 | createBrushHandler, 24 | createBrush, 25 | }; 26 | -------------------------------------------------------------------------------- /srcts/src/imageutils/resetBrush.ts: -------------------------------------------------------------------------------- 1 | import { imageOutputBinding } from "../bindings/output/image"; 2 | import { shinySetInputValue } from "../shiny/initedMethods"; 3 | 4 | function resetBrush(brushId: string): void { 5 | shinySetInputValue(brushId, null); 6 | imageOutputBinding 7 | .find(document.documentElement) 8 | .trigger("shiny-internal:brushed", { 9 | brushId: brushId, 10 | outputId: null, 11 | }); 12 | } 13 | 14 | export { resetBrush }; 15 | -------------------------------------------------------------------------------- /srcts/src/imageutils/shiftToRange.ts: -------------------------------------------------------------------------------- 1 | // Shift an array of values so that they are within a min and max. The vals 2 | // will be shifted so that they maintain the same spacing internally. If the 3 | // range in vals is larger than the range of min and max, the result might not 4 | // make sense. 5 | function shiftToRange( 6 | vals: number[] | number, 7 | min: number, 8 | max: number 9 | ): number[] { 10 | if (!(vals instanceof Array)) vals = [vals]; 11 | 12 | const maxval = Math.max.apply(null, vals); 13 | const minval = Math.min.apply(null, vals); 14 | let shiftAmount = 0; 15 | 16 | if (maxval > max) { 17 | shiftAmount = max - maxval; 18 | } else if (minval < min) { 19 | shiftAmount = min - minval; 20 | } 21 | 22 | const newvals = []; 23 | 24 | for (let i = 0; i < vals.length; i++) { 25 | newvals[i] = vals[i] + shiftAmount; 26 | } 27 | return newvals; 28 | } 29 | 30 | export { shiftToRange }; 31 | -------------------------------------------------------------------------------- /srcts/src/index.ts: -------------------------------------------------------------------------------- 1 | import { init } from "./initialize"; 2 | export { Shiny, type ShinyClass } from "./initialize"; 3 | 4 | init(); 5 | -------------------------------------------------------------------------------- /srcts/src/initialize/disableForm.ts: -------------------------------------------------------------------------------- 1 | import $ from "jquery"; 2 | 3 | function disableFormSubmission(): void { 4 | // disable form submissions 5 | $(document).on("submit", "form:not([action])", function (e) { 6 | e.preventDefault(); 7 | }); 8 | } 9 | 10 | export { disableFormSubmission }; 11 | -------------------------------------------------------------------------------- /srcts/src/initialize/history.ts: -------------------------------------------------------------------------------- 1 | import $ from "jquery"; 2 | 3 | function trackHistory(): void { 4 | const origPushState = window.history.pushState; 5 | 6 | window.history.pushState = function (...args) { 7 | const result = origPushState.apply(this, args); 8 | 9 | $(document).trigger("pushstate"); 10 | return result; 11 | }; 12 | } 13 | 14 | export { trackHistory }; 15 | -------------------------------------------------------------------------------- /srcts/src/inputPolicies/index.ts: -------------------------------------------------------------------------------- 1 | import { InputBatchSender } from "./inputBatchSender"; 2 | import { InputDeferDecorator } from "./inputDeferDecorator"; 3 | import { InputEventDecorator } from "./inputEventDecorator"; 4 | import { InputNoResendDecorator } from "./inputNoResendDecorator"; 5 | import { InputRateDecorator } from "./inputRateDecorator"; 6 | import { InputValidateDecorator } from "./inputValidateDecorator"; 7 | 8 | import type { EventPriority, InputPolicy } from "./inputPolicy"; 9 | import type { InputRatePolicy } from "./inputRatePolicy"; 10 | 11 | export { 12 | InputBatchSender, 13 | InputEventDecorator, 14 | InputNoResendDecorator, 15 | InputRateDecorator, 16 | InputDeferDecorator, 17 | InputValidateDecorator, 18 | }; 19 | export type { InputPolicy, EventPriority, InputRatePolicy }; 20 | -------------------------------------------------------------------------------- /srcts/src/inputPolicies/inputPolicy.ts: -------------------------------------------------------------------------------- 1 | import type { InputBinding } from "../bindings"; 2 | 3 | type EventPriority = "deferred" | "event" | "immediate"; 4 | 5 | type InputPolicyOpts = { 6 | priority: EventPriority; 7 | el?: HTMLElement; 8 | binding?: InputBinding; 9 | }; 10 | 11 | // Schedules data to be sent to shinyapp at the next setTimeout(0). 12 | // Batches multiple input calls into one websocket message. 13 | interface InputPolicy { 14 | target: InputPolicy; 15 | 16 | setInput(name: string, value: unknown, opts: InputPolicyOpts): void; 17 | } 18 | 19 | export type { InputPolicy, EventPriority, InputPolicyOpts }; 20 | -------------------------------------------------------------------------------- /srcts/src/inputPolicies/inputRatePolicy.ts: -------------------------------------------------------------------------------- 1 | import type { AnyVoidFunction } from "../utils/extraTypes"; 2 | import type { InputPolicy } from "./inputPolicy"; 3 | 4 | interface InputRatePolicy { 5 | target: InputPolicy | null; 6 | func: X; 7 | 8 | normalCall(...args: Parameters): void; 9 | immediateCall(...args: Parameters): void; 10 | } 11 | 12 | export type { InputRatePolicy }; 13 | -------------------------------------------------------------------------------- /srcts/src/inputPolicies/splitInputNameType.ts: -------------------------------------------------------------------------------- 1 | function splitInputNameType(nameType: string): { 2 | name: string; 3 | inputType: string | ""; 4 | } { 5 | const name2 = nameType.split(":"); 6 | 7 | return { 8 | name: name2[0], 9 | inputType: name2.length > 1 ? name2[1] : "", 10 | }; 11 | } 12 | 13 | export { splitInputNameType }; 14 | -------------------------------------------------------------------------------- /srcts/src/shiny/error.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Custom error to throw when a we detect a known error type on the client 3 | * @param headline - Error headline to show to user. Will be shown in normal 4 | * font and should be used to give plain language description of problem 5 | * @param message - Error message to show to user. Will be shown in monospaced 6 | * font 7 | */ 8 | export class ShinyClientError extends Error { 9 | headline: string; 10 | 11 | constructor({ headline, message }: { headline: string; message: string }) { 12 | super(message); 13 | this.name = "ShinyClientError"; 14 | this.headline = headline; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /srcts/src/testing/extendJQuery.d.ts: -------------------------------------------------------------------------------- 1 | // Why this file is just an extension of JQuery with no import/exports 2 | // https://stackoverflow.com/a/30961346/591574 3 | 4 | // Model: 5 | // https://stackoverflow.com/a/47091565/591574 6 | // interface JQueryStatic { 7 | // //custom jquery plugin, had no typings 8 | // bsDatepicker(method: string): string | number | Date | null; 9 | // } 10 | 11 | // Modified from : stackoverflow.com/a/12722003/591574 12 | /// 13 | 14 | interface JQuery { 15 | // used for testing only 16 | internalTest: () => void; 17 | } 18 | -------------------------------------------------------------------------------- /srcts/src/testing/extendJQuery.ts: -------------------------------------------------------------------------------- 1 | // Used to avoid isolated module warning 2 | import "jquery"; 3 | 4 | declare global { 5 | interface JQuery { 6 | // used for testing only 7 | internalTest: () => void; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /srcts/src/time/index.ts: -------------------------------------------------------------------------------- 1 | import { debounce, Debouncer } from "./debounce"; 2 | import { Invoker } from "./invoke"; 3 | import { Throttler } from "./throttle"; 4 | 5 | export { Debouncer, debounce, Invoker, Throttler }; 6 | -------------------------------------------------------------------------------- /srcts/src/time/invoke.ts: -------------------------------------------------------------------------------- 1 | import type { InputPolicy } from "../inputPolicies"; 2 | import type { InputRatePolicy } from "../inputPolicies/inputRatePolicy"; 3 | import type { AnyVoidFunction } from "../utils/extraTypes"; 4 | 5 | class Invoker implements InputRatePolicy { 6 | target: InputPolicy | null; 7 | func: X; 8 | 9 | constructor(target: InputPolicy | null, func: X) { 10 | this.target = target; 11 | this.func = func; 12 | } 13 | 14 | // TODO-barret - Don't know how to define the method twice and still have access to "this" 15 | normalCall(...args: Parameters): void { 16 | this.func.apply(this.target, args); 17 | } 18 | immediateCall(...args: Parameters): void { 19 | this.func.apply(this.target, args); 20 | } 21 | } 22 | 23 | export { Invoker }; 24 | -------------------------------------------------------------------------------- /srcts/src/utils/__tests__/utils.test.ts: -------------------------------------------------------------------------------- 1 | import { asArray } from "../"; 2 | 3 | test("integer is converted to integer array", () => { 4 | expect(asArray(4)).toStrictEqual([4]); 5 | }); 6 | -------------------------------------------------------------------------------- /srcts/src/utils/browser.ts: -------------------------------------------------------------------------------- 1 | let isQtVal = false; 2 | let isIEVal = false; 3 | let versionIE = -1; 4 | 5 | function setIsQt(isQt: boolean): void { 6 | isQtVal = isQt; 7 | } 8 | function setIsIE(isIE: boolean): void { 9 | isIEVal = isIE; 10 | } 11 | function setIEVersion(versionIE_: number): void { 12 | versionIE = versionIE_; 13 | } 14 | 15 | function isQt(): boolean { 16 | return isQtVal; 17 | } 18 | function isIE(): boolean { 19 | return isIEVal; 20 | } 21 | 22 | // (Name existed before TS conversion) 23 | // eslint-disable-next-line @typescript-eslint/naming-convention 24 | function IEVersion(): number { 25 | return versionIE; 26 | } 27 | 28 | export { isQt, isIE, IEVersion, setIsQt, setIsIE, setIEVersion }; 29 | -------------------------------------------------------------------------------- /srcts/src/utils/eval.ts: -------------------------------------------------------------------------------- 1 | //esbuild.github.io/content-types/#direct-eval 2 | //tl/dr; 3 | // * Direct usage of `eval("x")` is bad with bundled code. 4 | // * Instead, use indirect calls to `eval` such as `indirectEval("x")` 5 | // * Even just renaming the function works well enough. 6 | // > This is known as "indirect eval" because eval is not being called directly, and so does not trigger the grammatical special case for direct eval in the JavaScript VM. You can call indirect eval using any syntax at all except for an expression of the exact form eval('x'). For example, var eval2 = eval; eval2('x') and [eval][0]('x') and window.eval('x') are all indirect eval calls. 7 | // > When you use indirect eval, the code is evaluated in the global scope instead of in the inline scope of the caller. 8 | 9 | const indirectEval = eval; 10 | 11 | export { indirectEval }; 12 | -------------------------------------------------------------------------------- /srcts/src/utils/extraTypes.ts: -------------------------------------------------------------------------------- 1 | type AnyFunction = (...args: any[]) => any; 2 | type AnyVoidFunction = (...args: any[]) => void; 3 | type MapValuesUnion = T[keyof T]; 4 | type MapWithResult = { 5 | [Property in keyof X]: R; 6 | }; 7 | 8 | /** 9 | * Exclude undefined from T 10 | */ 11 | type NotUndefined = T extends undefined ? never : T; 12 | 13 | export type { 14 | AnyFunction, 15 | AnyVoidFunction, 16 | MapValuesUnion, 17 | MapWithResult, 18 | NotUndefined, 19 | }; 20 | -------------------------------------------------------------------------------- /srcts/src/utils/userAgent.ts: -------------------------------------------------------------------------------- 1 | type UserAgent = typeof window.navigator.userAgent; 2 | 3 | let userAgent: UserAgent; 4 | 5 | function setUserAgent(userAgent_: UserAgent): void { 6 | userAgent = userAgent_; 7 | } 8 | 9 | export type { UserAgent }; 10 | export { userAgent, setUserAgent }; 11 | -------------------------------------------------------------------------------- /srcts/src/window/pixelRatio.ts: -------------------------------------------------------------------------------- 1 | function windowDevicePixelRatio(): number { 2 | return window.devicePixelRatio; 3 | } 4 | 5 | export { windowDevicePixelRatio }; 6 | -------------------------------------------------------------------------------- /srcts/src/window/userAgent.ts: -------------------------------------------------------------------------------- 1 | import type { UserAgent } from "../utils/userAgent"; 2 | 3 | function windowUserAgent(): UserAgent { 4 | return window.navigator.userAgent; 5 | } 6 | 7 | export { windowUserAgent }; 8 | -------------------------------------------------------------------------------- /srcts/types/extras/globalShiny.d.ts: -------------------------------------------------------------------------------- 1 | import type { ShinyClass } from "../src/shiny/index"; 2 | declare global { 3 | interface Window { 4 | Shiny: ShinyClass; 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /srcts/types/src/bindings/index.d.ts: -------------------------------------------------------------------------------- 1 | import { InputBinding } from "./input"; 2 | import { OutputBinding } from "./output"; 3 | export { InputBinding, OutputBinding }; 4 | -------------------------------------------------------------------------------- /srcts/types/src/bindings/input/actionbutton.d.ts: -------------------------------------------------------------------------------- 1 | import { InputBinding } from "./inputBinding"; 2 | type ActionButtonReceiveMessageData = { 3 | label?: string; 4 | icon?: string | []; 5 | disabled?: boolean; 6 | }; 7 | declare class ActionButtonInputBinding extends InputBinding { 8 | find(scope: HTMLElement): JQuery; 9 | getValue(el: HTMLElement): number; 10 | setValue(el: HTMLElement, value: number): void; 11 | getType(el: HTMLElement): string; 12 | subscribe(el: HTMLElement, callback: (x: boolean) => void): void; 13 | getState(el: HTMLElement): { 14 | value: number; 15 | }; 16 | receiveMessage(el: HTMLElement, data: ActionButtonReceiveMessageData): void; 17 | unsubscribe(el: HTMLElement): void; 18 | } 19 | export { ActionButtonInputBinding }; 20 | export type { ActionButtonReceiveMessageData }; 21 | -------------------------------------------------------------------------------- /srcts/types/src/bindings/input/fileinput.d.ts: -------------------------------------------------------------------------------- 1 | import { InputBinding } from "./inputBinding"; 2 | declare class FileInputBinding extends InputBinding { 3 | find(scope: HTMLElement): JQuery; 4 | getId(el: HTMLInputElement): string; 5 | getValue(el: HTMLElement): { 6 | name?: string; 7 | } | null; 8 | setValue(el: HTMLElement, value: void): void; 9 | getType(el: HTMLElement): string; 10 | subscribe(el: HTMLInputElement, callback: (x: boolean) => void): void; 11 | unsubscribe(el: HTMLElement): void; 12 | } 13 | export { FileInputBinding }; 14 | -------------------------------------------------------------------------------- /srcts/types/src/bindings/input/index.d.ts: -------------------------------------------------------------------------------- 1 | import { BindingRegistry } from "../registry"; 2 | import { InputBinding } from "./inputBinding"; 3 | import { FileInputBinding } from "./fileinput"; 4 | declare function initInputBindings(): { 5 | inputBindings: BindingRegistry; 6 | fileInputBinding: FileInputBinding; 7 | }; 8 | export { initInputBindings, InputBinding }; 9 | -------------------------------------------------------------------------------- /srcts/types/src/bindings/input/inputBinding.d.ts: -------------------------------------------------------------------------------- 1 | import type { RatePolicyModes } from "../../inputPolicies/inputRateDecorator"; 2 | import type { BindScope } from "../../shiny/bind"; 3 | declare class InputBinding { 4 | name: string; 5 | find(scope: BindScope): JQuery; 6 | getId(el: HTMLElement): string; 7 | getType(el: HTMLElement): string | null; 8 | getValue(el: HTMLElement): any; 9 | subscribe(el: HTMLElement, callback: (value: boolean) => void): void; 10 | unsubscribe(el: HTMLElement): void; 11 | receiveMessage(el: HTMLElement, data: unknown): Promise | void; 12 | getState(el: HTMLElement): unknown; 13 | getRatePolicy(el: HTMLElement): { 14 | policy: RatePolicyModes; 15 | delay: number; 16 | } | null; 17 | initialize(el: HTMLElement): void; 18 | dispose(el: HTMLElement): void; 19 | } 20 | export { InputBinding }; 21 | -------------------------------------------------------------------------------- /srcts/types/src/bindings/input/password.d.ts: -------------------------------------------------------------------------------- 1 | import { TextInputBinding } from "./text"; 2 | declare class PasswordInputBinding extends TextInputBinding { 3 | find(scope: HTMLElement): JQuery; 4 | getType(el: HTMLElement): string; 5 | } 6 | export { PasswordInputBinding }; 7 | -------------------------------------------------------------------------------- /srcts/types/src/bindings/input/tabinput.d.ts: -------------------------------------------------------------------------------- 1 | import { InputBinding } from "./inputBinding"; 2 | type TabInputReceiveMessageData = { 3 | value?: string; 4 | }; 5 | declare class BootstrapTabInputBinding extends InputBinding { 6 | find(scope: HTMLElement): JQuery; 7 | getValue(el: HTMLElement): string | null; 8 | setValue(el: HTMLElement, value: string | undefined): void; 9 | getState(el: HTMLElement): { 10 | value: string | null; 11 | }; 12 | receiveMessage(el: HTMLElement, data: TabInputReceiveMessageData): void; 13 | subscribe(el: HTMLElement, callback: (x: boolean) => void): void; 14 | unsubscribe(el: HTMLElement): void; 15 | } 16 | export { BootstrapTabInputBinding }; 17 | export type { TabInputReceiveMessageData }; 18 | -------------------------------------------------------------------------------- /srcts/types/src/bindings/input/textarea.d.ts: -------------------------------------------------------------------------------- 1 | import { TextInputBinding } from "./text"; 2 | declare class TextareaInputBinding extends TextInputBinding { 3 | #private; 4 | find(scope: HTMLElement): JQuery; 5 | initialize(el: HTMLInputElement): void; 6 | subscribe(el: HTMLInputElement, callback: (x: boolean) => void): void; 7 | unsubscribe(el: HTMLInputElement): void; 8 | } 9 | export { TextareaInputBinding }; 10 | -------------------------------------------------------------------------------- /srcts/types/src/bindings/output/datatable.d.ts: -------------------------------------------------------------------------------- 1 | import type { ErrorsMessageValue } from "../../shiny/shinyapp"; 2 | import { OutputBinding } from "./outputBinding"; 3 | declare class DatatableOutputBinding extends OutputBinding { 4 | find(scope: HTMLElement): JQuery; 5 | onValueError(el: HTMLElement, err: ErrorsMessageValue): void; 6 | renderValue(el: HTMLElement, data: { 7 | colnames?: string[]; 8 | options?: { 9 | searching?: boolean; 10 | search?: { 11 | caseInsensitive?: boolean; 12 | }; 13 | escape?: string; 14 | } | null; 15 | escape?: string; 16 | action?: string; 17 | evalOptions?: string[]; 18 | callback?: string; 19 | searchDelay?: number; 20 | } | null): void; 21 | } 22 | export { DatatableOutputBinding }; 23 | -------------------------------------------------------------------------------- /srcts/types/src/bindings/output/downloadlink.d.ts: -------------------------------------------------------------------------------- 1 | import { OutputBinding } from "./outputBinding"; 2 | declare class DownloadLinkOutputBinding extends OutputBinding { 3 | find(scope: HTMLElement): JQuery; 4 | renderValue(el: HTMLElement, data: string): void; 5 | showProgress(el: HTMLElement, show: boolean): void; 6 | } 7 | export { DownloadLinkOutputBinding }; 8 | -------------------------------------------------------------------------------- /srcts/types/src/bindings/output/html.d.ts: -------------------------------------------------------------------------------- 1 | import { renderContentAsync } from "../../shiny/render"; 2 | import type { ErrorsMessageValue } from "../../shiny/shinyapp"; 3 | import { OutputBinding } from "./outputBinding"; 4 | declare class HtmlOutputBinding extends OutputBinding { 5 | find(scope: HTMLElement): JQuery; 6 | onValueError(el: HTMLElement, err: ErrorsMessageValue): void; 7 | renderValue(el: HTMLElement, data: Parameters[1]): Promise; 8 | } 9 | export { HtmlOutputBinding }; 10 | -------------------------------------------------------------------------------- /srcts/types/src/bindings/output/image.d.ts: -------------------------------------------------------------------------------- 1 | import type { CoordmapInit } from "../../imageutils/initCoordmap"; 2 | import type { ErrorsMessageValue } from "../../shiny/shinyapp"; 3 | import { OutputBinding } from "./outputBinding"; 4 | declare class ImageOutputBinding extends OutputBinding { 5 | find(scope: HTMLElement): JQuery; 6 | renderValue(el: HTMLElement, data: { 7 | coordmap: CoordmapInit; 8 | error?: string; 9 | } & { 10 | [key: string]: string; 11 | }): void; 12 | renderError(el: HTMLElement, err: ErrorsMessageValue): void; 13 | clearError(el: HTMLElement): void; 14 | resize(el: HTMLElement, width: number | string, height: number | string): void; 15 | } 16 | declare const imageOutputBinding: ImageOutputBinding; 17 | export { imageOutputBinding, ImageOutputBinding }; 18 | -------------------------------------------------------------------------------- /srcts/types/src/bindings/output/index.d.ts: -------------------------------------------------------------------------------- 1 | import { BindingRegistry } from "../registry"; 2 | import { OutputBinding } from "./outputBinding"; 3 | type InitOutputBindings = { 4 | outputBindings: BindingRegistry; 5 | }; 6 | declare function initOutputBindings(): InitOutputBindings; 7 | export { OutputBinding, initOutputBindings }; 8 | -------------------------------------------------------------------------------- /srcts/types/src/bindings/output/outputBinding.d.ts: -------------------------------------------------------------------------------- 1 | import type { ErrorsMessageValue } from "../../shiny/shinyapp"; 2 | declare class OutputBinding { 3 | name: string; 4 | find(scope: HTMLElement | JQuery): JQuery; 5 | renderValue(el: HTMLElement, data: unknown): Promise | void; 6 | getId(el: HTMLElement): string; 7 | onValueChange(el: HTMLElement, data: unknown): Promise; 8 | onValueError(el: HTMLElement, err: ErrorsMessageValue): void; 9 | renderError(el: HTMLElement, err: ErrorsMessageValue): void; 10 | clearError(el: HTMLElement): void; 11 | showProgress(el: HTMLElement, show: boolean): void; 12 | } 13 | export { OutputBinding }; 14 | -------------------------------------------------------------------------------- /srcts/types/src/bindings/output/text.d.ts: -------------------------------------------------------------------------------- 1 | import { OutputBinding } from "./outputBinding"; 2 | declare class TextOutputBinding extends OutputBinding { 3 | find(scope: HTMLElement): JQuery; 4 | renderValue(el: HTMLElement, data: boolean | number | string): void; 5 | } 6 | export { TextOutputBinding }; 7 | -------------------------------------------------------------------------------- /srcts/types/src/bindings/outputAdapter.d.ts: -------------------------------------------------------------------------------- 1 | import type { ErrorsMessageValue } from "../shiny/shinyapp"; 2 | import type { OutputBinding } from "./output"; 3 | interface OutpuBindingWithResize extends OutputBinding { 4 | resize?: (el: HTMLElement, width: number | string, height: number | string) => void; 5 | } 6 | declare class OutputBindingAdapter { 7 | el: HTMLElement; 8 | binding: OutputBinding; 9 | constructor(el: HTMLElement, binding: OutpuBindingWithResize); 10 | getId(): string; 11 | onValueChange(data: unknown): Promise; 12 | onValueError(err: ErrorsMessageValue): void; 13 | showProgress(show: boolean): void; 14 | onResize(): void; 15 | } 16 | export { OutputBindingAdapter }; 17 | -------------------------------------------------------------------------------- /srcts/types/src/bindings/registry.d.ts: -------------------------------------------------------------------------------- 1 | interface BindingBase { 2 | name: string; 3 | } 4 | interface BindingObj { 5 | binding: Binding; 6 | priority: number; 7 | name?: string; 8 | } 9 | declare class BindingRegistry { 10 | name: string; 11 | bindings: Array>; 12 | bindingNames: { 13 | [key: string]: BindingObj; 14 | }; 15 | register(binding: Binding, bindingName: string, priority?: number): void; 16 | setPriority(bindingName: string, priority: number): void; 17 | getPriority(bindingName: string): number | false; 18 | getBindings(): Array>; 19 | } 20 | export { BindingRegistry }; 21 | -------------------------------------------------------------------------------- /srcts/types/src/events/inputChanged.d.ts: -------------------------------------------------------------------------------- 1 | import type { FileInputBinding } from "../bindings/input/fileinput"; 2 | import type { ShinyEventInputChanged } from "./shinyEvents"; 3 | declare function triggerFileInputChanged(name: string, value: unknown, binding: FileInputBinding, el: HTMLElement, inputType: string, onEl: typeof document): ShinyEventInputChanged; 4 | export { triggerFileInputChanged }; 5 | -------------------------------------------------------------------------------- /srcts/types/src/imageutils/createClickInfo.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | declare function createClickInfo($el: JQuery, dblclickId: string, dblclickDelay: number): { 3 | mousedown: (e: JQuery.MouseDownEvent) => void; 4 | dblclickIE8: (e: JQuery.DoubleClickEvent) => void; 5 | }; 6 | export { createClickInfo }; 7 | -------------------------------------------------------------------------------- /srcts/types/src/imageutils/disableDrag.d.ts: -------------------------------------------------------------------------------- 1 | declare function disableDrag($el: JQuery, $img: JQuery): void; 2 | export { disableDrag }; 3 | -------------------------------------------------------------------------------- /srcts/types/src/imageutils/findbox.d.ts: -------------------------------------------------------------------------------- 1 | import type { Bounds } from "./createBrush"; 2 | type Offset = { 3 | x: number; 4 | y: number; 5 | }; 6 | declare function findBox(offset1: Offset, offset2: Offset): Bounds; 7 | export type { Offset }; 8 | export { findBox }; 9 | -------------------------------------------------------------------------------- /srcts/types/src/imageutils/index.d.ts: -------------------------------------------------------------------------------- 1 | import { createBrush } from "./createBrush"; 2 | import { createClickInfo } from "./createClickInfo"; 3 | import { createBrushHandler, createClickHandler, createHoverHandler } from "./createHandlers"; 4 | import { disableDrag } from "./disableDrag"; 5 | import { findBox } from "./findbox"; 6 | import { initCoordmap } from "./initCoordmap"; 7 | import { initPanelScales } from "./initPanelScales"; 8 | import { shiftToRange } from "./shiftToRange"; 9 | export { disableDrag, initPanelScales, initCoordmap, findBox, shiftToRange, createClickInfo, createClickHandler, createHoverHandler, createBrushHandler, createBrush, }; 10 | -------------------------------------------------------------------------------- /srcts/types/src/imageutils/resetBrush.d.ts: -------------------------------------------------------------------------------- 1 | declare function resetBrush(brushId: string): void; 2 | export { resetBrush }; 3 | -------------------------------------------------------------------------------- /srcts/types/src/imageutils/shiftToRange.d.ts: -------------------------------------------------------------------------------- 1 | declare function shiftToRange(vals: number[] | number, min: number, max: number): number[]; 2 | export { shiftToRange }; 3 | -------------------------------------------------------------------------------- /srcts/types/src/index.d.ts: -------------------------------------------------------------------------------- 1 | export { Shiny, type ShinyClass } from "./initialize"; 2 | -------------------------------------------------------------------------------- /srcts/types/src/initialize/browser.d.ts: -------------------------------------------------------------------------------- 1 | declare function determineBrowserInfo(): void; 2 | export { determineBrowserInfo }; 3 | -------------------------------------------------------------------------------- /srcts/types/src/initialize/disableForm.d.ts: -------------------------------------------------------------------------------- 1 | declare function disableFormSubmission(): void; 2 | export { disableFormSubmission }; 3 | -------------------------------------------------------------------------------- /srcts/types/src/initialize/history.d.ts: -------------------------------------------------------------------------------- 1 | declare function trackHistory(): void; 2 | export { trackHistory }; 3 | -------------------------------------------------------------------------------- /srcts/types/src/initialize/index.d.ts: -------------------------------------------------------------------------------- 1 | import { ShinyClass } from "../shiny"; 2 | declare let Shiny: ShinyClass; 3 | declare function init(): void; 4 | export { init, Shiny, type ShinyClass }; 5 | -------------------------------------------------------------------------------- /srcts/types/src/inputPolicies/index.d.ts: -------------------------------------------------------------------------------- 1 | import { InputBatchSender } from "./inputBatchSender"; 2 | import { InputDeferDecorator } from "./inputDeferDecorator"; 3 | import { InputEventDecorator } from "./inputEventDecorator"; 4 | import { InputNoResendDecorator } from "./inputNoResendDecorator"; 5 | import { InputRateDecorator } from "./inputRateDecorator"; 6 | import { InputValidateDecorator } from "./inputValidateDecorator"; 7 | import type { EventPriority, InputPolicy } from "./inputPolicy"; 8 | import type { InputRatePolicy } from "./inputRatePolicy"; 9 | export { InputBatchSender, InputEventDecorator, InputNoResendDecorator, InputRateDecorator, InputDeferDecorator, InputValidateDecorator, }; 10 | export type { InputPolicy, EventPriority, InputRatePolicy }; 11 | -------------------------------------------------------------------------------- /srcts/types/src/inputPolicies/inputBatchSender.d.ts: -------------------------------------------------------------------------------- 1 | import type { ShinyApp } from "../shiny/shinyapp"; 2 | import type { InputPolicy, InputPolicyOpts } from "./inputPolicy"; 3 | declare class InputBatchSender implements InputPolicy { 4 | target: InputPolicy; 5 | shinyapp: ShinyApp; 6 | pendingData: { 7 | [key: string]: unknown; 8 | }; 9 | reentrant: boolean; 10 | sendIsEnqueued: boolean; 11 | lastChanceCallback: Array<() => void>; 12 | constructor(shinyapp: ShinyApp); 13 | setInput(nameType: string, value: unknown, opts: InputPolicyOpts): void; 14 | private _sendNow; 15 | } 16 | export { InputBatchSender }; 17 | -------------------------------------------------------------------------------- /srcts/types/src/inputPolicies/inputDeferDecorator.d.ts: -------------------------------------------------------------------------------- 1 | import type { EventPriority, InputPolicy, InputPolicyOpts } from "./inputPolicy"; 2 | declare class InputDeferDecorator implements InputPolicy { 3 | pendingInput: { 4 | [key: string]: { 5 | value: unknown; 6 | opts: { 7 | priority: EventPriority; 8 | }; 9 | }; 10 | }; 11 | target: InputPolicy; 12 | constructor(target: InputPolicy); 13 | setInput(nameType: string, value: unknown, opts: InputPolicyOpts): void; 14 | submit(): void; 15 | } 16 | export { InputDeferDecorator }; 17 | -------------------------------------------------------------------------------- /srcts/types/src/inputPolicies/inputEventDecorator.d.ts: -------------------------------------------------------------------------------- 1 | import type { InputPolicy, InputPolicyOpts } from "./inputPolicy"; 2 | declare class InputEventDecorator implements InputPolicy { 3 | target: InputPolicy; 4 | constructor(target: InputPolicy); 5 | setInput(nameType: string, value: unknown, opts: InputPolicyOpts): void; 6 | } 7 | export { InputEventDecorator }; 8 | -------------------------------------------------------------------------------- /srcts/types/src/inputPolicies/inputNoResendDecorator.d.ts: -------------------------------------------------------------------------------- 1 | import type { InputPolicy, InputPolicyOpts } from "./inputPolicy"; 2 | type LastSentValues = { 3 | [key: string]: { 4 | [key: string]: string; 5 | }; 6 | }; 7 | declare class InputNoResendDecorator implements InputPolicy { 8 | target: InputPolicy; 9 | lastSentValues: LastSentValues; 10 | constructor(target: InputPolicy, initialValues?: LastSentValues); 11 | setInput(nameType: string, value: unknown, opts: InputPolicyOpts): void; 12 | reset(values?: LastSentValues): void; 13 | forget(name: string): void; 14 | } 15 | export { InputNoResendDecorator }; 16 | -------------------------------------------------------------------------------- /srcts/types/src/inputPolicies/inputPolicy.d.ts: -------------------------------------------------------------------------------- 1 | import type { InputBinding } from "../bindings"; 2 | type EventPriority = "deferred" | "event" | "immediate"; 3 | type InputPolicyOpts = { 4 | priority: EventPriority; 5 | el?: HTMLElement; 6 | binding?: InputBinding; 7 | }; 8 | interface InputPolicy { 9 | target: InputPolicy; 10 | setInput(name: string, value: unknown, opts: InputPolicyOpts): void; 11 | } 12 | export type { InputPolicy, EventPriority, InputPolicyOpts }; 13 | -------------------------------------------------------------------------------- /srcts/types/src/inputPolicies/inputRateDecorator.d.ts: -------------------------------------------------------------------------------- 1 | import type { InputPolicy, InputPolicyOpts } from "./inputPolicy"; 2 | import type { InputRatePolicy } from "./inputRatePolicy"; 3 | type RatePolicyModes = "debounce" | "direct" | "throttle"; 4 | declare class InputRateDecorator implements InputPolicy { 5 | target: InputPolicy; 6 | inputRatePolicies: { 7 | [key: string]: InputRatePolicy; 8 | }; 9 | constructor(target: InputPolicy); 10 | setInput(nameType: string, value: unknown, opts: InputPolicyOpts): void; 11 | setRatePolicy(nameType: string, mode: RatePolicyModes, millis?: number): void; 12 | private _ensureInit; 13 | private _doSetInput; 14 | } 15 | export { InputRateDecorator }; 16 | export type { RatePolicyModes }; 17 | -------------------------------------------------------------------------------- /srcts/types/src/inputPolicies/inputRatePolicy.d.ts: -------------------------------------------------------------------------------- 1 | import type { AnyVoidFunction } from "../utils/extraTypes"; 2 | import type { InputPolicy } from "./inputPolicy"; 3 | interface InputRatePolicy { 4 | target: InputPolicy | null; 5 | func: X; 6 | normalCall(...args: Parameters): void; 7 | immediateCall(...args: Parameters): void; 8 | } 9 | export type { InputRatePolicy }; 10 | -------------------------------------------------------------------------------- /srcts/types/src/inputPolicies/inputValidateDecorator.d.ts: -------------------------------------------------------------------------------- 1 | import type { InputPolicy, InputPolicyOpts } from "./inputPolicy"; 2 | declare function addDefaultInputOpts(opts: Partial): InputPolicyOpts; 3 | declare class InputValidateDecorator implements InputPolicy { 4 | target: InputPolicy; 5 | constructor(target: InputPolicy); 6 | setInput(nameType: string, value: unknown, opts?: Partial): void; 7 | } 8 | export { InputValidateDecorator, addDefaultInputOpts }; 9 | -------------------------------------------------------------------------------- /srcts/types/src/inputPolicies/splitInputNameType.d.ts: -------------------------------------------------------------------------------- 1 | declare function splitInputNameType(nameType: string): { 2 | name: string; 3 | inputType: string | ""; 4 | }; 5 | export { splitInputNameType }; 6 | -------------------------------------------------------------------------------- /srcts/types/src/shiny/error.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Custom error to throw when a we detect a known error type on the client 3 | * @param headline - Error headline to show to user. Will be shown in normal 4 | * font and should be used to give plain language description of problem 5 | * @param message - Error message to show to user. Will be shown in monospaced 6 | * font 7 | */ 8 | export declare class ShinyClientError extends Error { 9 | headline: string; 10 | constructor({ headline, message }: { 11 | headline: string; 12 | message: string; 13 | }); 14 | } 15 | -------------------------------------------------------------------------------- /srcts/types/src/shiny/modal.d.ts: -------------------------------------------------------------------------------- 1 | import type { HtmlDep } from "./render"; 2 | declare function show({ html, deps, }?: { 3 | html?: string; 4 | deps?: HtmlDep[]; 5 | }): Promise; 6 | declare function remove(): void; 7 | export { show as showModal, remove as removeModal }; 8 | -------------------------------------------------------------------------------- /srcts/types/src/shiny/notifications.d.ts: -------------------------------------------------------------------------------- 1 | import { randomId } from "../utils"; 2 | import type { HtmlDep } from "./render"; 3 | declare function show({ html, action, deps, duration, id, closeButton, type, }?: { 4 | html?: string; 5 | action?: string; 6 | deps?: HtmlDep[]; 7 | duration?: number | null; 8 | id?: string | null; 9 | closeButton?: boolean; 10 | type?: string | null; 11 | }): Promise>; 12 | declare function remove(id: string): void; 13 | export { show as showNotification, remove as removeNotification }; 14 | -------------------------------------------------------------------------------- /srcts/types/src/shiny/outputProgress.d.ts: -------------------------------------------------------------------------------- 1 | type Message = { 2 | [key: string]: unknown; 3 | }; 4 | declare class OutputProgressReporter { 5 | #private; 6 | private outputStates; 7 | private changedOutputs; 8 | takeChanges(): Map; 9 | isRecalculating(name: string): boolean; 10 | updateStateFromMessage(message: Message): void; 11 | } 12 | export { OutputProgressReporter }; 13 | -------------------------------------------------------------------------------- /srcts/types/src/shiny/reactlog.d.ts: -------------------------------------------------------------------------------- 1 | declare function initReactlog(): void; 2 | export { initReactlog }; 3 | -------------------------------------------------------------------------------- /srcts/types/src/shiny/reconnectDialog.d.ts: -------------------------------------------------------------------------------- 1 | declare function showReconnectDialog(delay: number): Promise; 2 | declare function hideReconnectDialog(): void; 3 | export { showReconnectDialog, hideReconnectDialog }; 4 | -------------------------------------------------------------------------------- /srcts/types/src/shiny/sendImageSize.d.ts: -------------------------------------------------------------------------------- 1 | import type { InputBatchSender } from "../inputPolicies"; 2 | import { Debouncer } from "../time"; 3 | declare class SendImageSize { 4 | regular: () => void; 5 | transitioned: () => void; 6 | setImageSend(inputBatchSender: InputBatchSender, doSendImageSize: () => void): Debouncer; 7 | } 8 | declare const sendImageSizeFns: SendImageSize; 9 | export { sendImageSizeFns }; 10 | -------------------------------------------------------------------------------- /srcts/types/src/shiny/singletons.d.ts: -------------------------------------------------------------------------------- 1 | import type { BindScope } from "./bind"; 2 | declare const knownSingletons: { 3 | [key: string]: boolean; 4 | }; 5 | type WherePosition = "afterBegin" | "afterEnd" | "beforeBegin" | "beforeEnd" | "replace"; 6 | declare function renderHtml(html: string, el: BindScope, where: WherePosition): ReturnType; 7 | declare function registerNames(s: string[] | string): void; 8 | declare function processHtml(val: string): { 9 | html: string; 10 | head: string; 11 | singletons: typeof knownSingletons; 12 | }; 13 | export { renderHtml, registerNames }; 14 | export type { WherePosition }; 15 | -------------------------------------------------------------------------------- /srcts/types/src/testing/extendJQuery.d.ts: -------------------------------------------------------------------------------- 1 | import "jquery"; 2 | declare global { 3 | interface JQuery { 4 | internalTest: () => void; 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /srcts/types/src/time/debounce.d.ts: -------------------------------------------------------------------------------- 1 | import type { InputPolicy } from "../inputPolicies"; 2 | import type { InputRatePolicy } from "../inputPolicies/inputRatePolicy"; 3 | import type { AnyVoidFunction } from "../utils/extraTypes"; 4 | declare class Debouncer implements InputRatePolicy { 5 | target: InputPolicy | null; 6 | func: X; 7 | delayMs: number | undefined; 8 | timerId: ReturnType | null; 9 | args: Parameters | null; 10 | constructor(target: InputPolicy | null, func: X, delayMs: number | undefined); 11 | normalCall(...args: Parameters): void; 12 | immediateCall(...args: Parameters): void; 13 | isPending(): boolean; 14 | $clearTimer(): void; 15 | $invoke(): void; 16 | } 17 | declare function debounce void>(threshold: number | undefined, func: T): (...args: Parameters) => void; 18 | export { Debouncer, debounce }; 19 | -------------------------------------------------------------------------------- /srcts/types/src/time/index.d.ts: -------------------------------------------------------------------------------- 1 | import { debounce, Debouncer } from "./debounce"; 2 | import { Invoker } from "./invoke"; 3 | import { Throttler } from "./throttle"; 4 | export { Debouncer, debounce, Invoker, Throttler }; 5 | -------------------------------------------------------------------------------- /srcts/types/src/time/invoke.d.ts: -------------------------------------------------------------------------------- 1 | import type { InputPolicy } from "../inputPolicies"; 2 | import type { InputRatePolicy } from "../inputPolicies/inputRatePolicy"; 3 | import type { AnyVoidFunction } from "../utils/extraTypes"; 4 | declare class Invoker implements InputRatePolicy { 5 | target: InputPolicy | null; 6 | func: X; 7 | constructor(target: InputPolicy | null, func: X); 8 | normalCall(...args: Parameters): void; 9 | immediateCall(...args: Parameters): void; 10 | } 11 | export { Invoker }; 12 | -------------------------------------------------------------------------------- /srcts/types/src/time/throttle.d.ts: -------------------------------------------------------------------------------- 1 | import type { InputPolicy } from "../inputPolicies"; 2 | import type { InputRatePolicy } from "../inputPolicies/inputRatePolicy"; 3 | import type { AnyVoidFunction } from "../utils/extraTypes"; 4 | declare class Throttler implements InputRatePolicy { 5 | target: InputPolicy | null; 6 | func: X; 7 | delayMs: number | undefined; 8 | timerId: ReturnType | null; 9 | args: Parameters | null; 10 | constructor(target: InputPolicy | null, func: X, delayMs: number | undefined); 11 | normalCall(...args: Parameters): void; 12 | immediateCall(...args: Parameters): void; 13 | isPending(): boolean; 14 | $clearTimer(): void; 15 | $invoke(): void; 16 | } 17 | export { Throttler, }; 18 | -------------------------------------------------------------------------------- /srcts/types/src/utils/asyncQueue.d.ts: -------------------------------------------------------------------------------- 1 | export declare class AsyncQueue { 2 | private $promises; 3 | private $resolvers; 4 | private _add; 5 | enqueue(x: T): void; 6 | dequeue(): Promise; 7 | isEmpty(): boolean; 8 | isBlocked(): boolean; 9 | get length(): number; 10 | } 11 | -------------------------------------------------------------------------------- /srcts/types/src/utils/browser.d.ts: -------------------------------------------------------------------------------- 1 | declare function setIsQt(isQt: boolean): void; 2 | declare function setIsIE(isIE: boolean): void; 3 | declare function setIEVersion(versionIE_: number): void; 4 | declare function isQt(): boolean; 5 | declare function isIE(): boolean; 6 | declare function IEVersion(): number; 7 | export { isQt, isIE, IEVersion, setIsQt, setIsIE, setIEVersion }; 8 | -------------------------------------------------------------------------------- /srcts/types/src/utils/eval.d.ts: -------------------------------------------------------------------------------- 1 | declare const indirectEval: typeof eval; 2 | export { indirectEval }; 3 | -------------------------------------------------------------------------------- /srcts/types/src/utils/extraTypes.d.ts: -------------------------------------------------------------------------------- 1 | type AnyFunction = (...args: any[]) => any; 2 | type AnyVoidFunction = (...args: any[]) => void; 3 | type MapValuesUnion = T[keyof T]; 4 | type MapWithResult = { 5 | [Property in keyof X]: R; 6 | }; 7 | /** 8 | * Exclude undefined from T 9 | */ 10 | type NotUndefined = T extends undefined ? never : T; 11 | export type { AnyFunction, AnyVoidFunction, MapValuesUnion, MapWithResult, NotUndefined, }; 12 | -------------------------------------------------------------------------------- /srcts/types/src/utils/object.d.ts: -------------------------------------------------------------------------------- 1 | import type { NotUndefined } from "./extraTypes"; 2 | declare function hasOwnProperty(obj: X, prop: Prop): obj is X & { 5 | [key in NonNullable]: X[key]; 6 | }; 7 | declare function hasDefinedProperty(obj: X, prop: Prop): obj is X & { 10 | [key in NonNullable]: NotUndefined; 11 | }; 12 | declare function ifUndefined, Y>(value: X, alternate: Y): NotUndefined; 13 | declare function ifUndefined(value: X, alternate: Y): Y; 14 | export { hasOwnProperty, hasDefinedProperty, ifUndefined }; 15 | -------------------------------------------------------------------------------- /srcts/types/src/utils/promise.d.ts: -------------------------------------------------------------------------------- 1 | export declare function promiseWithResolvers(): { 2 | promise: Promise; 3 | resolve: (value: PromiseLike | T) => void; 4 | reject: (reason?: any) => void; 5 | }; 6 | export interface InitStatusPromise extends Promise { 7 | promise: Promise; 8 | resolve(x: T): void; 9 | resolved(): boolean; 10 | } 11 | export declare function createInitStatus(): InitStatusPromise; 12 | -------------------------------------------------------------------------------- /srcts/types/src/utils/userAgent.d.ts: -------------------------------------------------------------------------------- 1 | type UserAgent = typeof window.navigator.userAgent; 2 | declare let userAgent: UserAgent; 3 | declare function setUserAgent(userAgent_: UserAgent): void; 4 | export type { UserAgent }; 5 | export { userAgent, setUserAgent }; 6 | -------------------------------------------------------------------------------- /srcts/types/src/window/pixelRatio.d.ts: -------------------------------------------------------------------------------- 1 | declare function windowDevicePixelRatio(): number; 2 | export { windowDevicePixelRatio }; 3 | -------------------------------------------------------------------------------- /srcts/types/src/window/userAgent.d.ts: -------------------------------------------------------------------------------- 1 | import type { UserAgent } from "../utils/userAgent"; 2 | declare function windowUserAgent(): UserAgent; 3 | export { windowUserAgent }; 4 | -------------------------------------------------------------------------------- /tests/test-encoding/02-backslash/server.R: -------------------------------------------------------------------------------- 1 | function(input, output) { 2 | } 3 | -------------------------------------------------------------------------------- /tests/test-encoding/02-backslash/ui.R: -------------------------------------------------------------------------------- 1 | library(shiny) 2 | 3 | tagList( 4 | p("Chinese: 中文"), 5 | helpText("T:\\2_共享区\\11_资料共享\\MO_Task_File") 6 | ) 7 | -------------------------------------------------------------------------------- /tests/test-helpers/app1-standard/R/helperCap.R: -------------------------------------------------------------------------------- 1 | source_wd <- getwd() 2 | helper1 <- 123 3 | -------------------------------------------------------------------------------- /tests/test-helpers/app1-standard/R/helperLower.r: -------------------------------------------------------------------------------- 1 | 2 | helper2 <- "abc" 3 | -------------------------------------------------------------------------------- /tests/test-helpers/app1-standard/global.R: -------------------------------------------------------------------------------- 1 | global <- "ABC" 2 | global_wd <- getwd() 3 | -------------------------------------------------------------------------------- /tests/test-helpers/app1-standard/server.R: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstudio/shiny/eac0eea88612c26eb78d9cc906b01ad0b2ccb3f5/tests/test-helpers/app1-standard/server.R -------------------------------------------------------------------------------- /tests/test-helpers/app1-standard/tests/runner1.R: -------------------------------------------------------------------------------- 1 | 2 | runner1_A <- 1 3 | -------------------------------------------------------------------------------- /tests/test-helpers/app1-standard/tests/runner2.R: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | withr::with_environment( 5 | shiny::loadSupport(), 6 | { 7 | runner2_B <- 2 8 | 9 | if (!identical(helper1, 123)){ 10 | stop("Missing helper1") 11 | } 12 | if (!identical(helper2, "abc")){ 13 | stop("Missing helper2") 14 | } 15 | if (exists("runner1_A")){ 16 | stop("runner1_A exists -- are we leaking in between test environments?") 17 | } 18 | } 19 | ) 20 | -------------------------------------------------------------------------------- /tests/test-helpers/app1-standard/ui.R: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstudio/shiny/eac0eea88612c26eb78d9cc906b01ad0b2ccb3f5/tests/test-helpers/app1-standard/ui.R -------------------------------------------------------------------------------- /tests/test-helpers/app2-nested/R/helper.R: -------------------------------------------------------------------------------- 1 | 2 | helper1 <- 456 3 | -------------------------------------------------------------------------------- /tests/test-helpers/app2-nested/R/nested/helper.R: -------------------------------------------------------------------------------- 1 | 2 | helper2 <- "def" 3 | -------------------------------------------------------------------------------- /tests/test-helpers/app2-nested/app.R: -------------------------------------------------------------------------------- 1 | 2 | library(shiny) 3 | 4 | ui <- fluidPage() 5 | 6 | server <- function(input, output) {} 7 | 8 | shinyApp(ui = ui, server = server) 9 | -------------------------------------------------------------------------------- /tests/test-helpers/app2-nested/global.R: -------------------------------------------------------------------------------- 1 | stop("global.R should never be sourced alongside app.R") 2 | -------------------------------------------------------------------------------- /tests/test-helpers/app3-badglobal/R/helper.R: -------------------------------------------------------------------------------- 1 | 2 | helper1 <- 456 3 | -------------------------------------------------------------------------------- /tests/test-helpers/app3-badglobal/global.R: -------------------------------------------------------------------------------- 1 | 2 | stop("I wasn't supposed to be sourced") 3 | -------------------------------------------------------------------------------- /tests/test-helpers/app4-both/app.R: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstudio/shiny/eac0eea88612c26eb78d9cc906b01ad0b2ccb3f5/tests/test-helpers/app4-both/app.R -------------------------------------------------------------------------------- /tests/test-helpers/app4-both/r/lower.R: -------------------------------------------------------------------------------- 1 | lowerHelper <- 123 2 | -------------------------------------------------------------------------------- /tests/test-helpers/app5-bad-supporting/R/helper.R: -------------------------------------------------------------------------------- 1 | 2 | stop("Imma crash") 3 | -------------------------------------------------------------------------------- /tests/test-helpers/app5-bad-supporting/global.R: -------------------------------------------------------------------------------- 1 | 2 | happy <- TRUE 3 | -------------------------------------------------------------------------------- /tests/test-helpers/app6-disabled/R/_DISABLE_autoload.r: -------------------------------------------------------------------------------- 1 | 2 | helper2 <- "abc" 3 | -------------------------------------------------------------------------------- /tests/test-helpers/app6-disabled/R/helperCap.R: -------------------------------------------------------------------------------- 1 | 2 | helper1 <- 123 3 | -------------------------------------------------------------------------------- /tests/test-helpers/app6-disabled/R/helperLower.r: -------------------------------------------------------------------------------- 1 | 2 | helper2 <- "abc" 3 | -------------------------------------------------------------------------------- /tests/test-helpers/app6-disabled/global.R: -------------------------------------------------------------------------------- 1 | global <- "ABC" 2 | -------------------------------------------------------------------------------- /tests/test-helpers/app6-disabled/server.R: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstudio/shiny/eac0eea88612c26eb78d9cc906b01ad0b2ccb3f5/tests/test-helpers/app6-disabled/server.R -------------------------------------------------------------------------------- /tests/test-helpers/app6-disabled/ui.R: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rstudio/shiny/eac0eea88612c26eb78d9cc906b01ad0b2ccb3f5/tests/test-helpers/app6-disabled/ui.R -------------------------------------------------------------------------------- /tests/test-helpers/app6-empty-tests/tests/file.txt: -------------------------------------------------------------------------------- 1 | R CMD check doesn't like empty directories. But this isn't an R file so it will be ignored. 2 | -------------------------------------------------------------------------------- /tests/test-helpers/app7-port/app.R: -------------------------------------------------------------------------------- 1 | library(shiny) 2 | 3 | ui <- fluidPage( 4 | ) 5 | 6 | server <- function(input, output, session) { 7 | } 8 | 9 | opts <- list( 10 | port = as.numeric(Sys.getenv("SHINY_TESTTHAT_PORT_APP", "8080")), 11 | launch.browser = FALSE 12 | ) 13 | 14 | shinyApp(ui, server, options = opts) 15 | -------------------------------------------------------------------------------- /tests/test-helpers/app7-port/option-broken.R: -------------------------------------------------------------------------------- 1 | library(shiny) 2 | 3 | op <- options(shiny.port = httpuv::randomPort()) 4 | onStop(function() { options(op) }) 5 | 6 | stop("boom") 7 | -------------------------------------------------------------------------------- /tests/test-helpers/app7-port/option.R: -------------------------------------------------------------------------------- 1 | library(shiny) 2 | 3 | op <- options(shiny.port = as.numeric(Sys.getenv("SHINY_TESTTHAT_PORT_OPTION", "8080"))) 4 | onStop(function() { options(op) }) 5 | 6 | ui <- fluidPage( 7 | 8 | ) 9 | 10 | server <- function(input, output, session) { 11 | 12 | } 13 | 14 | shinyApp(ui, server) 15 | -------------------------------------------------------------------------------- /tests/test-helpers/app7-port/wrapped.R: -------------------------------------------------------------------------------- 1 | shinyAppDir(".") 2 | -------------------------------------------------------------------------------- /tests/test-helpers/app7-port/wrapped2.R: -------------------------------------------------------------------------------- 1 | shinyAppFile( 2 | "wrapped.R", 3 | options = list( 4 | port = as.numeric(Sys.getenv("SHINY_TESTTHAT_PORT_WRAPPED2", "8080")) 5 | ) 6 | ) 7 | -------------------------------------------------------------------------------- /tests/test-modules/107_scatterplot/R/scatterplot.R: -------------------------------------------------------------------------------- 1 | alpha_val <- 0.2 2 | 3 | scatterPlot <- function(data, cols) { 4 | ggplot(data, aes_string(x = cols[1], y = cols[2])) + 5 | geom_point(aes(color = selected_), alpha = alpha_val) + 6 | scale_color_manual(values = c("black", "#66D65C"), guide = FALSE) 7 | } 8 | -------------------------------------------------------------------------------- /tests/test-modules/107_scatterplot/app.R: -------------------------------------------------------------------------------- 1 | library(shiny) 2 | library(ggplot2) 3 | 4 | 5 | ui <- fixedPage( 6 | h2("Module example"), 7 | linkedScatterUI("scatters"), 8 | textOutput("summary") 9 | ) 10 | 11 | server <- function(input, output, session) { 12 | df <- linkedScatterServer( 13 | "scatters", 14 | reactive(mpg), # data 15 | left = reactive(c("cty", "hwy")), 16 | right = reactive(c("drv", "hwy")) 17 | ) 18 | 19 | output$summary <- renderText({ 20 | sprintf("%d observation(s) selected", sum(df()$selected_)) 21 | }) 22 | } 23 | 24 | shinyApp(ui, server) 25 | -------------------------------------------------------------------------------- /tests/test-modules/107_scatterplot/tests/testthat.R: -------------------------------------------------------------------------------- 1 | library(testthat) 2 | 3 | test_dir( 4 | "./testthat", 5 | env = shiny::loadSupport(), 6 | reporter = c("progress", "fail") 7 | ) 8 | -------------------------------------------------------------------------------- /tests/test-modules/107_scatterplot/tests/testthat/test-plot.R: -------------------------------------------------------------------------------- 1 | test_that("Value exists", { 2 | expect_true(exists("alpha_val")) 3 | expect_equal(alpha_val, 0.2) 4 | }) 5 | -------------------------------------------------------------------------------- /tests/test-modules/12_counter/R/my-module.R: -------------------------------------------------------------------------------- 1 | mymoduleUI <- function(id, label = "Counter") { 2 | ns <- NS(id) 3 | tagList( 4 | actionButton(ns("button"), label = label), 5 | verbatimTextOutput(ns("out")) 6 | ) 7 | } 8 | 9 | mymoduleServer <- function(id) { 10 | moduleServer( 11 | id, 12 | function(input, output, session) { 13 | count <- reactiveVal(0) 14 | observeEvent(input$button, { 15 | count(count() + 1) 16 | }) 17 | output$out <- renderText({ 18 | count() 19 | }) 20 | count 21 | } 22 | ) 23 | } 24 | -------------------------------------------------------------------------------- /tests/test-modules/12_counter/R/utils.R: -------------------------------------------------------------------------------- 1 | # Given a numeric vector, convert to strings, sort, and convert back to 2 | # numeric. 3 | lexical_sort <- function(x) { 4 | as.numeric(sort(as.character(x))) 5 | } 6 | -------------------------------------------------------------------------------- /tests/test-modules/12_counter/tests/testthat.R: -------------------------------------------------------------------------------- 1 | library(testthat) 2 | 3 | # Run in the "current" environment, because shiny::runTests() is going to 4 | # provision a new environment that's just for our test. And we'll want access to 5 | # the supporting files that were already loaded into that env. 6 | testthat::test_dir( 7 | "./testthat", 8 | env = shiny::loadSupport(), 9 | reporter = c("summary", "fail") 10 | ) 11 | -------------------------------------------------------------------------------- /tests/test-modules/12_counter/tests/testthat/test-mymodule.R: -------------------------------------------------------------------------------- 1 | testServer(mymoduleServer, { 2 | # Set initial value of a button 3 | session$setInputs(button = 0) 4 | 5 | # Check the value of the reactiveVal `count()` 6 | expect_equal(count(), 1) 7 | # Check the value of the renderText() 8 | expect_equal(output$out, "1") 9 | 10 | # Simulate a click 11 | session$setInputs(button = 1) 12 | 13 | expect_equal(count(), 2) 14 | expect_equal(output$out, "2") 15 | }) 16 | -------------------------------------------------------------------------------- /tests/test-modules/12_counter/tests/testthat/test-server.R: -------------------------------------------------------------------------------- 1 | # Use testthat just for expectations 2 | testServer(expr = { 3 | # Set the `size` slider and check the output 4 | session$setInputs(size = 6) 5 | expect_equal(output$sequence, "1 2 3 4 5 6") 6 | 7 | session$setInputs(size = 12) 8 | expect_equal(output$sequence, paste0(lexical_sort(1:12), collapse = " ")) 9 | }) 10 | -------------------------------------------------------------------------------- /tests/test-modules/12_counter/tests/testthat/test-utils.R: -------------------------------------------------------------------------------- 1 | # Test the lexical_sort function from R/utils.R 2 | test_that("Lexical sorting works", { 3 | expect_equal(lexical_sort(c(1, 2, 3)), c(1, 2, 3)) 4 | expect_equal(lexical_sort(c(1, 2, 3, 13, 11, 21)), c(1, 11, 13, 2, 21, 3)) 5 | }) 6 | -------------------------------------------------------------------------------- /tests/testthat.R: -------------------------------------------------------------------------------- 1 | library(testthat) 2 | library(shiny) 3 | 4 | test_check("shiny") 5 | -------------------------------------------------------------------------------- /tests/testthat/print-reactiveValues.txt: -------------------------------------------------------------------------------- 1 | > x <- reactiveValues(x = 1, y = 2, z = 3) 2 | > x 3 | 4 | Values: x, y, z 5 | Readonly: FALSE 6 | 7 | -------------------------------------------------------------------------------- /tests/testthat/test-built-files.R: -------------------------------------------------------------------------------- 1 | test_that("shiny.js version was replaced", { 2 | jsFiles <- system.file( 3 | file.path("www", "shared", c("shiny.js", "shiny.min.js")), 4 | package = "shiny" 5 | ) 6 | 7 | lapply(jsFiles, function(jsFile) { 8 | jsFileContent <- paste(suppressWarnings(readLines(jsFile)), collapse = "\n") 9 | expect_false(grepl("\\{\\{\\sVERSION\\s\\}\\}", jsFileContent)) 10 | }) 11 | }) 12 | -------------------------------------------------------------------------------- /tests/testthat/test-get-extension.R: -------------------------------------------------------------------------------- 1 | test_that("Valid extensions are preserved", { 2 | expect_equal(maybeGetExtension("report.csv"), ".csv") 3 | expect_equal(maybeGetExtension("data.tar.bz2"), ".bz2") 4 | }) 5 | 6 | test_that("Invalid extensions are discarded", { 7 | expect_equal(maybeGetExtension("report. ℒ 裸 邏 ℓo "), "") 8 | expect_equal(maybeGetExtension("data"), "") 9 | }) 10 | -------------------------------------------------------------------------------- /tests/testthat/test-pkgdown.R: -------------------------------------------------------------------------------- 1 | 2 | test_that("pkgdown works", { 3 | skip_on_cran() 4 | skip_if_not_installed("rprojroot") 5 | 6 | # These tests can only be run when we have access to the source 7 | # (i.e., they are skipped with `R CMD check`) 8 | pkgdown_file <- "../../tools/documentation/checkPkgdown.R" 9 | if (file.exists(pkgdown_file)) { 10 | source(pkgdown_file) 11 | } else { 12 | skip("Not able to verify whether the pkgdown reference is up-to-date") 13 | } 14 | }) 15 | -------------------------------------------------------------------------------- /tests/testthat/test-plot-png.R: -------------------------------------------------------------------------------- 1 | test_that("plotPNG()/startPNG() ignores NULL dimensions", { 2 | f <- plotPNG(function() plot(1), width = NULL, height = NULL) 3 | on.exit(unlink(f)) 4 | bits <- readBin(f, "raw", file.info(f)$size) 5 | expect_gt(length(bits), 0) 6 | }) 7 | -------------------------------------------------------------------------------- /tests/testthat/test-stacks-pruning.R: -------------------------------------------------------------------------------- 1 | foo <- function() { 2 | capture <- function() { 3 | list( 4 | calls = sys.calls(), 5 | parents = sys.parents() 6 | ) 7 | } 8 | 9 | capture_1 <- function() { 10 | capture() 11 | } 12 | 13 | capture_2 <- function() { 14 | capture_1() 15 | } 16 | 17 | do.call( 18 | identity, 19 | list( 20 | identity(capture_2()) 21 | ) 22 | ) 23 | } 24 | res <- foo() 25 | res$calls <- tail(res$calls, 6) 26 | res$parents <- tail(res$parents - (length(res$parents) - 6), 6) 27 | 28 | describe("stack pruning", { 29 | it("passes basic example", { 30 | expect_equal(pruneStackTrace(res$parents), c(T, F, F, T, T, T)) 31 | expect_equal(lapply(list(res$parents), pruneStackTrace), list(c(T, F, F, T, T, T))) 32 | }) 33 | }) 34 | -------------------------------------------------------------------------------- /tests/testthat/test-stop-app.R: -------------------------------------------------------------------------------- 1 | checkAndGetResults <- function(isError, isStopped) { 2 | stopifnot(shiny:::.globals$reterror == isError) 3 | stopifnot(shiny:::.globals$stopped, isStopped) 4 | shiny:::.globals$retval 5 | } 6 | 7 | test_that("stopApp records errors and respects visibility", { 8 | 9 | stopApp(10) 10 | expect_equal(withVisible(10), checkAndGetResults(FALSE, TRUE)) 11 | 12 | stopApp(invisible(cars)) 13 | expect_equal(withVisible(invisible(cars)), checkAndGetResults(FALSE, TRUE)) 14 | 15 | stopApp(stop("boom", call. = FALSE)) 16 | err <- checkAndGetResults(TRUE, TRUE) 17 | attr(err, "stack.trace") <- NULL 18 | expect_identical(simpleError("boom"), err) 19 | }) 20 | -------------------------------------------------------------------------------- /tools/documentation/reexports.json: -------------------------------------------------------------------------------- 1 | { 2 | "fastmap": { 3 | "name": "fastmap", 4 | "repo": "r-lib/fastmap", 5 | "exports": [ 6 | { "file": "key_missing.Rd" } 7 | ] 8 | }, 9 | "htmltools": { 10 | "name": "htmltools", 11 | "repo": "rstudio/htmltools", 12 | "exports": [ 13 | { "file": "builder.Rd", "ignore": "builder" }, 14 | { "file": "tagList.Rd" }, 15 | { "file": "tagAppendAttributes.Rd" }, 16 | { "file": "tagAppendChild.Rd", "ignore": "tagInsertChildren" }, 17 | { "file": "HTML.Rd" }, 18 | { "file": "include.Rd", "ignore": "include" }, 19 | { "file": "singleton.Rd" }, 20 | { "file": "validateCssUnit.Rd" }, 21 | { "file": "htmlTemplate.Rd" }, 22 | { "file": "suppressDependencies.Rd" }, 23 | { "file": "withTags.Rd" } 24 | ] 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /tools/ion.rangeSlider-patches/0003-Try-catch-removeProp.patch: -------------------------------------------------------------------------------- 1 | diff --git a/inst/www/shared/ionrangeslider/js/ion.rangeSlider.js b/inst/www/shared/ionrangeslider/js/ion.rangeSlider.js 2 | index 89d204ed..ae467f10 100644 3 | --- a/inst/www/shared/ionrangeslider/js/ion.rangeSlider.js 4 | +++ b/inst/www/shared/ionrangeslider/js/ion.rangeSlider.js 5 | @@ -1723,7 +1723,12 @@ 6 | if (this.has_tab_index) { 7 | this.$cache.input.prop("tabindex", -1); 8 | } else { 9 | - this.$cache.input.removeProp("tabindex"); 10 | + try { 11 | + this.$cache.input.removeProp("tabindex"); 12 | + } catch(e) { 13 | + // Do nothing (PhantomJS can throw an error with the 14 | + // above, #2587) 15 | + } 16 | } 17 | 18 | this.has_tab_index = !this.has_tab_index; 19 | -------------------------------------------------------------------------------- /tools/ion.rangeSlider-patches/0004-handle-cursor-pointer.patch: -------------------------------------------------------------------------------- 1 | diff --git a/inst/www/shared/ionrangeslider/scss/_base.scss b/inst/www/shared/ionrangeslider/scss/_base.scss 2 | index dbe14260..1a12c546 100644 3 | --- a/inst/www/shared/ionrangeslider/scss/_base.scss 4 | +++ b/inst/www/shared/ionrangeslider/scss/_base.scss 5 | @@ -32,7 +32,7 @@ $irs-font-family: Arial, sans-serif !default; 6 | &-handle { 7 | @include pos-a(); 8 | box-sizing: border-box; 9 | - cursor: default; 10 | + cursor: pointer; 11 | z-index: 1; 12 | 13 | &.single, 14 | -------------------------------------------------------------------------------- /tools/ion.rangeSlider-patches/0006-box-sizing-border-box.patch: -------------------------------------------------------------------------------- 1 | diff --git a/inst/www/shared/ionrangeslider/scss/_base.scss b/inst/www/shared/ionrangeslider/scss/_base.scss 2 | index fec67457..010de825 100644 3 | --- a/inst/www/shared/ionrangeslider/scss/_base.scss 4 | +++ b/inst/www/shared/ionrangeslider/scss/_base.scss 5 | @@ -4,6 +4,12 @@ 6 | @include pos-r(); 7 | -webkit-touch-callout: none; 8 | @include no-click(); 9 | + /* https://github.com/rstudio/shiny/issues/3443 */ 10 | + /* https://css-tricks.com/inheriting-box-sizing-probably-slightly-better-best-practice/ */ 11 | + box-sizing: border-box; 12 | + *, *:before, *:after { 13 | + box-sizing: inherit; 14 | + } 15 | 16 | &-line { 17 | @include pos-r(); 18 | -------------------------------------------------------------------------------- /tools/selectize-patches/005-bs5-font-styling.patch: -------------------------------------------------------------------------------- 1 | diff --git a/inst/www/shared/selectize/scss/selectize.bootstrap5.scss b/inst/www/shared/selectize/scss/selectize.bootstrap5.scss 2 | index 4d991532d..bf15610d8 100644 3 | --- a/inst/www/shared/selectize/scss/selectize.bootstrap5.scss 4 | +++ b/inst/www/shared/selectize/scss/selectize.bootstrap5.scss 5 | @@ -1,7 +1,7 @@ 6 | 7 | $enable-shadows: true !default; 8 | -$select-font-family: inherit !default; 9 | -$select-font-size: inherit !default; 10 | +$select-font-family: if($input-btn-font-family, $input-btn-font-family, inherit) !default; 11 | +$select-font-size: $input-btn-font-size !default; 12 | $select-line-height: $input-btn-line-height !default; //formerly line-height-computed 13 | 14 | $select-color-text: $gray-800 !default; //$gray-800 15 | -------------------------------------------------------------------------------- /tools/selectize-patches/009-selectize-selectOnTab-false.patch: -------------------------------------------------------------------------------- 1 | diff --git a/inst/www/shared/selectize/js/selectize.js b/inst/www/shared/selectize/js/selectize.js 2 | index a902fae5b..5fa6dccaf 100644 3 | --- a/inst/www/shared/selectize/js/selectize.js 4 | +++ b/inst/www/shared/selectize/js/selectize.js 5 | @@ -2757,7 +2757,7 @@ Selectize.defaults = { 6 | maxItems: null, 7 | hideSelected: null, 8 | addPrecedence: false, 9 | - selectOnTab: true, 10 | + selectOnTab: false, 11 | preload: false, 12 | allowEmptyOption: false, 13 | showEmptyOptionInDropdown: false, 14 | -------------------------------------------------------------------------------- /tools/updateDataTables.R: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env Rscript 2 | 3 | # This script downloads DataTabes from its GitHub repository, 4 | # https://github.com/DataTables/DataTables 5 | 6 | # This script can be sourced from RStudio, or run with Rscript. 7 | 8 | version <- "1.10.22" 9 | cdn <- file.path("https://cdn.datatables.net", version) 10 | 11 | dest <- rprojroot::find_package_root_file("inst/www/shared/datatables") 12 | 13 | withr::with_dir(dest, { 14 | 15 | files <- c( 16 | "js/jquery.dataTables.min.js", 17 | "js/dataTables.bootstrap.js", 18 | "css/dataTables.bootstrap.css", 19 | "images/sort_desc.png", 20 | "images/sort_desc_disabled.png", 21 | "images/sort_both.png", 22 | "images/sort_asc.png", 23 | "images/sort_asc_disabled.png" 24 | ) 25 | 26 | lapply(files, function(f) { 27 | download.file(file.path(cdn, f), f) 28 | }) 29 | 30 | }) 31 | 32 | -------------------------------------------------------------------------------- /tools/updatePackageJsonVersion.R: -------------------------------------------------------------------------------- 1 | # Updates the package.json `version` to match the DESCRIPTION `Version` 2 | pkg <- jsonlite::read_json("package.json") 3 | version <- as.list(read.dcf("DESCRIPTION")[1,])$Version 4 | pkg$version <- gsub("^(\\d+).(\\d+).(\\d+).(.+)$", "\\1.\\2.\\3-alpha.\\4", version) 5 | pkg$files <- as.list(pkg$files) 6 | jsonlite::write_json(pkg, path = "package.json", pretty = TRUE, auto_unbox = TRUE) 7 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "declaration": true, 3 | "compilerOptions": { 4 | "target": "ES2021", 5 | "isolatedModules": true, 6 | "esModuleInterop": true, 7 | "declaration": true, 8 | "declarationDir": "./srcts/types", 9 | "emitDeclarationOnly": true, 10 | "moduleResolution": "node", 11 | // Can not use `types: []` to disable injecting NodeJS types. More types are 12 | // needed than just the DOM's `window.setTimeout` 13 | // "types": [], 14 | "strict": true, 15 | }, 16 | "include": [ 17 | "srcts/src/index.ts", 18 | "srcts/src/**/*.ts", 19 | "srcts/extras/globalShiny.ts" 20 | ], 21 | "exclude": [ 22 | "node_modules", 23 | "srcts/types/", 24 | "**/__tests__" 25 | ] 26 | } 27 | --------------------------------------------------------------------------------