Early implementation of Vue 3, Bootstrap 5 and Typescript

Overview

BoostrapVue 3

Bootstrap 5 + Vue 3 + Typescript

Components

Early versions of:

  • Accordion

  • Props: flush

  • Slots: default

  • Accordion item

  • Props: title, visible

  • Events: b-collapse events

  • Slots: default, title

  • Alert

  • Props: dismissible, fade, show, variant

  • Slots: default

  • Badge

  • Props: dot-indicator, text-indicator, pill, variant

  • Breadcrumb

  • Props: items

  • Slots: prepend, append

  • Button

  • Button group

  • Button toolbar

  • Card

  • Card body

  • Card footer

  • Card header

  • Card sub title

  • Card Text

  • Card Title

  • Carousel

  • Close button

  • Collapse

  • Props: modelValue (v-model), parent, toggle, visible

  • Events: show, shown, hide, hidden

  • Slots: default

  • Dropdowns

  • ListGroup

  • ListGroup item

  • Modal

  • Props: modelValue, no-backdrop, centered, fade, fullscreen, title, scrollable, show, size, static-backdrop

  • Events: show, shown, hide, hidden, hide-prevented

  • Slots: default, title

  • Navs

  • Navbar

  • Offcanvas

  • Props: modelValue (v-model), body-scrolling, backdrop, placement, title

  • Events: show, shown, hide, hidden

  • Slots: default, title

  • Pagination

  • Popover

    • Directive
  • Progress

  • Scrollspy

  • Spinners

  • Tabs

  • Toasts

  • Tooltip

    • Directive

Directives

  • v-b-toggle
  • v-b-modal
  • v-b-tooltip
  • v-b-popover

Composables

  • useBreadcrumb: A first attempt to have the breadcrumb's items in one place across the aplication.
  • useModal: The goal is to emulate the same behaviour as boostrap-vue progamatic modals.

License

MIT

Comments
  • some problems with BToastPlugin

    some problems with BToastPlugin

    1. BToastPlugin and 'useToast' not found.

    However, you can do it with the following import

    // ToastPlugin=BToastPlugin
    // but 'useToast' not found.
    import BootstrapVue3, {ToastPlugin} from 'bootstrap-vue-3'
    

    or

    import BToastPlugin, {useToast} from 'bootstrap-vue-3/src/components/BToast/plugin'
    
    1. toaster hides in fixed-top class

    toaster z-index: 11 fixed-top z-index: 1030 see Bootstrap z-index

    opened by tghkuma 25
  • Feature - Spin button

    Feature - Spin button

    Describe the PR

    First Functioning Spin Button Ported from the BootstrapVue Library.

    Tests have also been ported and adjusted to meet library changes.

    Finally some docs have been added(not in full)

    Small replication

    If the change is large enough, a small replication can help demonstrate the changes made. This is optional, but can help observe the intended changes. A mentioned issue that contains a replication also works.

    PR checklist

    What kind of change does this PR introduce? (check at least one)

    • [ ] Bugfix :bug: - fix(...)
    • [x] Feature - feat(...)
    • [ ] ARIA accessibility - fix(...)
    • [x] Documentation update - docs(...)
    • [ ] Other (please describe)

    The PR fulfills these requirements:

    • [x] Pull request title and all commits follow the Conventional Commits convention or have an override in this pull request body This is very important, as the CHANGELOG is generated from these messages, and determines the next version type. Pull requests that do not follow conventional commits or do not have an override will be denied
    opened by aceofwings 23
  • Table not sorting

    Table not sorting

    I'm struggling to make my b-table sortable Not sure what i'm doing wrong

    I use : "vue": "^3.2.13"

    "bootstrap-vue-3": "^0.1.6"

    Also, does it support filter and pagination ?

    This is my vue for now

    <template>
      <div class="overview">
        <b-table
            sort-by="status" sortDesc
            :items="items"
            :fields="formFields.licences"
        >
        </b-table>
      </div>
    </template>
    
    <script>
    
    export default {
      name: "licences.vue",
      data(){
        return {
          formFields: {
            licences: [
              {key: "name", sortable: true,  label: "Name"},
              {key: "status", sortable: true, label: "Status"},
            ],
          },
          items: [
            { name: "Jack", status: "Used" },
            {name: "Frank", status: "Unused"},
            {name: "Larry", status: "Used" }
          ]
          }
      }
    }
    </script>
    
    question 
    opened by mlevet 20
  • [Question] 0.4.0 release on npm?

    [Question] 0.4.0 release on npm?

    What you are trying to do I am trying to update to the most recent version (0.4.0)

    What you have already tried I could provide the direct git link, but its missing on npmjs.org

    question 
    opened by AltF02 17
  • export types in package.json // Seperate project for bootstrap-icons

    export types in package.json // Seperate project for bootstrap-icons

    Is your feature request related to a problem? Please describe. I would like to create a new project bootstrap-vue-3-icons as suggested in #255, however the icons use types from bootstrap-vue-3.

    Describe the solution you would like I would prefer not to duplicate these types and instead import the original ones from the bootstrap-vue-3 library.

    Describe alternatives you have considered Duplicating the types.

    Additional context The affected types are: Animation, ColorVariant, TextColorVariant - Animation however seems to be only used by the icons. Are there any other recommendations you can think of / a better way to do this?

    enhancement 
    opened by boindil 17
  • missing files in 0.1.13?

    missing files in 0.1.13?

    I don't know if this is related to nuxt, pnpm or bootstrap-vue-3 itself. but I just tried to use <b-container> and... meh.

    ERROR  Failed to resolve import "../types/position" from "../../node_modules/.pnpm/[email protected][email protected]/node_modules/bootstrap-vue-3/src/components/BContainer.vue". Does the file exist? (repeated 4 times)
    

    I can see position.d.ts there. any suggestion on how to fix this?

    opened by amery 16
  • Question: When can we expect b-table component?

    Question: When can we expect b-table component?

    At first, I just want to stress this is not any kind of complaint. :-) I would just like to know if there is any expected (approximate) date when b-table component (with the functionality comparable with that one from the original Bootstrap-Vue) will be released. We really need to use such table component in our project so I need to decide if to wait for this library or try some other way. Thanks to @cdmoro and all other contributers to this great project!

    enhancement 
    opened by Radouch 16
  • refactor(pnpm): migrate to pnpm and proper workspaces

    refactor(pnpm): migrate to pnpm and proper workspaces

    Remade pr to go to dev branch. There still contains some issues.

    1. I want to be certain that the package.json's contain their own required dependencies.
    2. I moved the original app.vue to it's own apps/playground/app.vue. This would be fine, if it was working.
    3. Last thing is fixing the workflows. If someone can double check that each package contains it's own required dependencies, that would be great. Perhaps ensuring that their scripts are correct too. I moved a lot, eslint, prettier, etc to the main workspace deps. Also, if someone could figure out why exactly the app.vue refuses to run, that would be awesome. I really think those are the only three things to do. I can do the workflows when everythings usable.
    opened by VividLemon 15
  • An attempt to implement items provider

    An attempt to implement items provider

    this PR is an attempt to implement the feature mentioned the in issue https://github.com/cdmoro/bootstrap-vue-3/issues/673


    I've tried my best to bring this feature on but not quite sure if did it right. Note that the provider is now a standalone prop not as it used to be in BSVue2 and should be passed through the provider prop instead of the items prop

    fully working example:

    <template>
      <b-container class="py-5">
        <!-- User Interface controls -->
        <b-row>
          <b-col lg="6" class="my-1">
            <b-form-group
              v-slot="{ariaDescribedby}"
              label="Sort"
              label-for="sort-by-select"
              label-cols-sm="3"
              label-align-sm="right"
              label-size="sm"
              class="mb-0"
            >
              <b-input-group size="sm">
                <b-form-select
                  id="sort-by-select"
                  v-model="sortBy"
                  :options="sortOptions"
                  :aria-describedby="ariaDescribedby"
                  class="w-75"
                >
                  <template #first>
                    <option value="">-- none --</option>
                  </template>
                </b-form-select>
    
                <b-form-select
                  v-model="sortDesc"
                  :disabled="!sortBy"
                  :aria-describedby="ariaDescribedby"
                  size="sm"
                  class="w-25"
                >
                  <option :value="false">Asc</option>
                  <option :value="true">Desc</option>
                </b-form-select>
              </b-input-group>
            </b-form-group>
          </b-col>
    
          <b-col lg="6" class="my-1">
            <b-form-group
              label="Filter"
              label-for="filter-input"
              label-cols-sm="3"
              label-align-sm="right"
              label-size="sm"
              class="mb-0"
            >
              <b-input-group size="sm">
                <b-form-input
                  id="filter-input"
                  v-model="filter"
                  type="search"
                  placeholder="Type to Search"
                />
    
                <b-input-group-append>
                  <b-button :disabled="!filter" @click="filter = ''">Clear</b-button>
                </b-input-group-append>
              </b-input-group>
            </b-form-group>
          </b-col>
    
          <b-col lg="6" class="my-1">
            <b-form-group
              v-slot="{ariaDescribedby}"
              v-model="sortDirection"
              label="Filter On"
              description="Leave all unchecked to filter on all data"
              label-cols-sm="3"
              label-align-sm="right"
              label-size="sm"
              class="mb-0"
            >
              <div class="d-flex gap-2">
                <b-form-checkbox v-model="filterOn" value="name">Name</b-form-checkbox>
                <b-form-checkbox v-model="filterOn" value="age">Age</b-form-checkbox>
                <b-form-checkbox v-model="filterOn" value="isActive">Active</b-form-checkbox>
              </div>
            </b-form-group>
          </b-col>
    
          <b-col sm="5" md="6" class="my-1">
            <b-form-group
              label="Per page"
              label-for="per-page-select"
              label-cols-sm="6"
              label-cols-md="4"
              label-cols-lg="3"
              label-align-sm="right"
              label-size="sm"
              class="mb-0"
            >
              <b-form-select id="per-page-select" v-model="perPage" :options="pageOptions" size="sm" />
            </b-form-group>
          </b-col>
    
          <b-col sm="7" md="6" class="my-1">
            <b-pagination
              v-model="currentPage"
              :total-rows="totalRows"
              :per-page="perPage"
              align="fill"
              size="sm"
              class="my-0"
            />
          </b-col>
        </b-row>
    
        <!-- Main table element -->
        <b-table
          v-model:sort-by="sortBy"
          v-model:sort-desc="sortDesc"
          v-model:busy="busy"
          :items="items"
          :fields="fields"
          :current-page="currentPage"
          :per-page="perPage"
          :filter="filter"
          responsive
          :filterable="filterOn"
          small
          :sort-internal="true"
          :provider="myProvider"
          :no-providing="['paging']"
          @filtered="onFiltered"
        >
          <template #cell(name)="row"> {{ row.value.first }} {{ row.value.last }} </template>
    
          <template #cell(actions)="row">
            <b-button size="sm" class="mr-1" @click="info(row.item, row.index, $event.target)">
              Info modal
            </b-button>
            <b-button size="sm" @click="row.toggleDetails">
              {{ row.detailsShowing ? 'Hide' : 'Show' }} Details
            </b-button>
          </template>
    
          <template #row-details="row">
            <b-card>
              <ul>
                <li v-for="(value, key) in row.item" :key="key">{{ key }}: {{ value }}</li>
                <b-button size="sm" @click="row.toggleDetails"> Toggle Details </b-button>
              </ul>
            </b-card>
          </template>
        </b-table>
    
        <!-- Info modal -->
        <b-modal
          :id="infoModal.id"
          v-model="infoModal.open"
          :title="infoModal.title"
          ok-only
          @hide="resetInfoModal"
        >
          <pre>{{ infoModal.content }}</pre>
        </b-modal>
      </b-container>
    </template>
    
    <script lang="ts">
    import { defineComponent } from 'vue'
    import { ColorVariant, TableItem } from './types'
    import { BTableProviderContext } from './types/components'
    
    export default defineComponent({
      data() {
        return {
          items: [
            {isActive: true, age: 40, name: {first: 'Dickerson', last: 'Macdonald'}},
            {isActive: false, age: 21, name: {first: 'Larsen', last: 'Shaw'}},
            {
              isActive: false,
              age: 9,
              name: {first: 'Mini', last: 'Navarro'},
              _rowVariant: 'success' as ColorVariant,
            },
            {isActive: false, age: 89, name: {first: 'Geneva', last: 'Wilson'}},
            {isActive: true, age: 38, name: {first: 'Jami', last: 'Carney'}},
            {isActive: false, age: 27, name: {first: 'Essie', last: 'Dunlap'}},
            {isActive: true, age: 40, name: {first: 'Thor', last: 'Macdonald'}},
            {
              isActive: true,
              age: 87,
              name: {first: 'Larsen', last: 'Shaw'},
              _cellVariants: {age: 'danger', isActive: 'warning'} as Record<any, any>,
            },
            {isActive: false, age: 26, name: {first: 'Mitzi', last: 'Navarro'}},
            {isActive: false, age: 22, name: {first: 'Genevieve', last: 'Wilson'}},
            {isActive: true, age: 38, name: {first: 'John', last: 'Carney'}},
            {isActive: false, age: 29, name: {first: 'Dick', last: 'Dunlap'}},
          ],
          fields: [
            {key: 'name', label: 'Person full name', sortable: true, sortDirection: 'desc'},
            {key: 'age', label: 'Person age', sortable: true, class: 'text-center'},
            {
              key: 'isActive',
              label: 'Is Active',
              formatter: (value: any, key: any, item: any) => (value ? 'Yes' : 'No'),
              sortable: true,
              sortByFormatted: true,
              filterByFormatted: true,
            },
            {key: 'actions', label: 'Actions'},
          ],
          totalRows: 1,
          currentPage: 1,
          busy: false,
          perPage: 5,
          pageOptions: [5, 10, 15, {value: 100, text: 'Show a lot'}],
          sortBy: '',
          sortDesc: false,
          sortDirection: 'asc',
          filter: '',
          filterOn: [],
          infoModal: {
            open: false,
            id: 'info-modal',
            title: '',
            content: '',
          },
        }
      },
      computed: {
        sortOptions() {
          // Create an options list from our fields
          return this.fields.filter((f) => f.sortable).map((f) => ({text: f.label, value: f.key}))
        },
      },
      mounted() {
        // Set the initial number of items
        this.totalRows = this.items.length
      },
      methods: {
        myProvider(
          ctx: BTableProviderContext,
          callback: (items: Array<TableItem>) => Promise<TableItem[] | undefined>
        ) {
          //ctx: {
          //   filter?: string
          //   currentPage?: number
          //   perPage?: number
          //   sortBy?: string
          //   sortDesc?: Booleanish
          // }
          const items: Array<TableItem> = [
            {isActive: false, age: 89, name: {first: 'Geneva', last: 'Wilson'}},
            {isActive: true, age: 38, name: {first: 'Jami', last: 'Carney'}},
            {isActive: false, age: 27, name: {first: 'Essie', last: 'Dunlap'}},
            {isActive: true, age: 40, name: {first: 'Thor', last: 'Macdonald'}},
          ]
    
          // console.log('Items set through a return', items);
          // // You can return an arroy of items
          // return items;
    
          // also you can return undefined and set the items through the callback function
          // callback(items)
          //   .then((items) => {
          //     console.log('Items set through callback function', items);
          //   })
          //   .finally(() => this.busy = false);
          // return undefined;
    
          // and finally you can return a promise that resolves an array of array OR undefined with setting the items through the callback function
          return new Promise<Array<TableItem> | undefined>((resolve, reject) => {
            setTimeout(() => {
              resolve(items)
            }, 3000)
          })
        },
        info(item: any, index: any, button: any) {
          this.infoModal.title = `Row index: ${index}`
          this.infoModal.content = JSON.stringify(item, null, 2)
          this.infoModal.open = true
        },
        resetInfoModal() {
          this.infoModal.title = ''
          this.infoModal.content = ''
        },
        onFiltered(filteredItems: any) {
          // Trigger pagination to update the number of buttons/pages due to filtering
          this.totalRows = filteredItems.length
          this.currentPage = 1
        },
      },
    })
    </script>
    
    
    opened by devhus 14
  • Multiple checkboxes: selection should keep order (?)

    Multiple checkboxes: selection should keep order (?)

    Is your feature request related to a problem? Please describe. Example: https://cdmoro.github.io/bootstrap-vue-3/components/FormCheckbox.html#changing-the-option-field-names

    If user clicks A, D, B, then Selected is [ "A", { "d": 1 }, "B" ]

    Describe the solution you would like No matter what order user clicks, Selected should preserve original options order, eg [ "A", "B", { "d": 1 } ]

    Describe alternatives you have considered I'm not sure if this should be handled by bootstrap-vue-3. It seems it's the default browser behavior. What do you think?

    enhancement 
    opened by mariusa 14
  • Tree-shaking?

    Tree-shaking?

    We can import individual components, as per https://github.com/cdmoro/bootstrap-vue-3/issues/188. But if you do this, it still seems to pull in all the code, which defeats the purpose.

    I have this plugin in a Nuxt3 proof of concept app:

    import BButton from 'bootstrap-vue-3'
    import BNotice from 'bootstrap-vue-3'
    
    export default defineNuxtPlugin((nuxtApp) => {
      nuxtApp.vueApp.use(BButton)
      nuxtApp.vueApp.use(BNotice)
    })
    
    

    If I then build this and check what code is flowing over the wire, I can see BTable, BToast, and all the other stuff that I'm not using, and Lighthouse warns me about unused code.

    I'm not knowledgeable enough in this area to identify why this might be happening, but I wonder if it is related to the TODO In BootstrapViewOptions.

    enhancement future addition stale 
    opened by edwh 14
  • Offcanvas Bootstrap JS dependencies removed

    Offcanvas Bootstrap JS dependencies removed

    Describe the PR

    Remove Bootstrap Dependencies from Offcanvas

    Small replication

    If the change is large enough, a small replication can help demonstrate the changes made. This is optional, but can help observe the intended changes. A mentioned issue that contains a replication also works.

    PR checklist

    What kind of change does this PR introduce? (check at least one)

    • [] Bugfix :bug: - fix(...)
    • [X] Feature - feat(...)
    • [ ] ARIA accessibility - fix(...)
    • [ ] Documentation update - docs(...)
    • [ ] Other (please describe)

    The PR fulfills these requirements:

    • [X] Pull request title and all commits follow the Conventional Commits convention or has an override in this pull request body This is very important, as the CHANGELOG is generated from these messages, and determines the next version type. Pull requests that do not follow conventional commits or do not have an override will be denied
    opened by aceofwings 2
  • b-form-checkbox sm and lg styling wrong when using button style

    b-form-checkbox sm and lg styling wrong when using button style

    Describe the bug

    When using b-form-checkbox in button mode, i'd assume they get the same sizing as a regular button. Rendering these next to each other shows that this is only the case for "non-sized" buttons - but on sm and lg styles, the checkbox is offset.

    The problematic part seems to be the padding set in form-control-<size>.

    image

    I could neither find the definition of this in the code - nor am i certain what other (negative?) side-effects changing this might have to other components.

    To Reproduce Reproduction stackblitz: https://stackblitz.com/edit/vue3-script-setup-with-vite-lxjcyo?file=package.json,src%2Fmain.js,src%2FApp.vue,src%2Fcomponents%2FHelloWorld.vue

    Expected behavior

    Both buttons have the same height, and no additional padding which can't be overridden without using negative margins on the checkbox.

    Screenshots Left is always the button, right the checkbox. Only the "medium" buttons are shown as they should be.

    image

    Environment (please complete the following information):

    • Version 0.4.15 / (also on main as of today)
    bug stale-exempt 
    opened by xmatthias 2
  • b-table provider not working for page two

    b-table provider not working for page two

    Describe the bug When a b-table page changes, the table doesn't render anything, even if the provider is returning correct data

    To Reproduce Steps to reproduce the behavior:

    1. Create a b-table with a provider, and pagination.
    2. The first page will load normally, but every other page wont load Expected behavior A clear and concise description of what you expected to happen.

    Screenshots First page, works normally First page, works normally

    image Second page, nothing shows

    <template>
        <b-table :fields="['id']" :provider="myProvider" :current-page="currentPage" :per-page="perPage"></b-table>
        <b-pagination :current-page="currentPage" :total-rows="totalRows" v-model="currentPage"></b-pagination>
    </template>
    
    <script>
    export default {
        data() {
            return {
                currentPage: 1,
                perPage: 10,
                totalRows: 100,
            };
        },
        methods: {
            myProvider(context) {
                let values = [];
    
                for (let i = 0; i < context.perPage; i++) {
                    values.push({ id: i });
                }
    
                return values;
            },
        },
    };
    </script>
    
    

    Example code, generating items as the page changes

    Environment (please complete the following information):

    • OS: Ubuntu-22.04 (WSL2)
    • Version 0.4.15
    bug 
    opened by leoralph 0
  • Bootstrap component code is not getting converted into HTML.

    Bootstrap component code is not getting converted into HTML.

    Vue version

    3.2.45

    Link to minimal reproduction

    https://github.com/DivakarSS/WebComponents

    Steps to reproduce

    The issue is that bootstrap components are not getting converted into HTML.

    Please click on the attached repo link and run demo.html file that is present in dist folder. It is generated using the following cmd:

    vue-cli-service build --mode production --modern --target lib --inline-vue --name vue-select ./src/main.ts

    What is expected?

    Bootstrap component is supposed to be converted into HTML.

    What is actually happening?

    Bootstrap components remains the same in dist files. Compilation is not happening.

    image

    System Info

    No response

    Any additional comments?

    Please let us know if we are missing anything.

    question 
    opened by yashwanth2714 5
  • b-form-radio-group does not render buttons as a group

    b-form-radio-group does not render buttons as a group

    Describe the bug When using the b-form-radio-group, the buttons fail to render using the button group formatting.

    To Reproduce Steps to reproduce the behavior:

    1. In your vue setup define per the button style radios example in the documentation
    let buttonsSelected = ref( 'radio1');
    let buttonsOptions = ref([
              { text: 'Radio 1', value: 'radio1' },
              { text: 'Radio 3', value: 'radio2' },
              { text: 'Radio 3 (disabled)', value: 'radio3', disabled: true },
              { text: 'Radio 4', value: 'radio4' }
            ]);
    
    1. In the template, define your button groups.
        <b-form-radio-group
          v-model="buttonsSelected"
          :options="buttonsOptions"
          name="radios-btn-default"
          buttons
        ></b-form-radio-group>
    
    1. View the resulting page. Note that the incorrect results can be seen in the documentation as well.

    Expected behavior The user expects the buttons to render as a single block as seen in the bootstrap documentation or in the bootstrap-vue documentation

    Screenshots Actual: ButtonRadioGroup Expected: ExpectedButtonRadioGroup

    Environment (please complete the following information):

    • OS: Monterey
    • Version 12.6.2
    • Chrome
    • Version 108.0.5359.98 (Official Build) (arm64)

    Additional context N/A

    bug stale-exempt 
    opened by jagjeet-ccl 0
  • Have nuxt in a separate package

    Have nuxt in a separate package

    Discussed in https://github.com/cdmoro/bootstrap-vue-3/discussions/840

    Originally posted by mariusa December 14, 2022 Hi,

    What do you think about havingnuxt support in a separate package, please?

    Not everybody is using it and the current install brings a lot deps due to nuxt.

    Thanks

    nuxt 
    opened by VividLemon 0
Releases(v0.5.1)
  • v0.5.1(Jan 5, 2023)

  • v0.5.0(Jan 2, 2023)

    0.5.0 (2023-01-02)

    ⚠ BREAKING CHANGES

    • Icons: remove Icons package indefinitely, please review new documentation section on how to include bootstrap-icons into your vue app!
    • BAlert: remake timer system to be standard accross all components (not implemented in other components yet) - read section on new docs
    • BAlert: fix timer system - read section on new docs
    • BAlert: close-count-down event renamed to close-countdown as it is one word
    • BAlert: remove show prop - use v-model and read docs

    Features

    • BAlert: add immediate, interval & showOnPause timer props (26010f3)
    • BAlert: remake timer system to be standard accross all components (not implemented in other components yet) - read section on new docs (26010f3)
    • BAlert: remove show prop - use v-model and read docs (26010f3)
    • BColorMode: create a color mode directive (e30aeaa)
    • create useColorMode composable in anticipation of Bootstrap v5.3 (e30aeaa)
    • export useColorMode (e30aeaa)
    • Icons: remove Icons package indefinitely, please review new documentation section on how to include bootstrap-icons into your vue app! (d3c13e0)
    • table: Add formatter support to table component (41f2f0b)
    • table: Add support for non-string fields in formatting (e2e2597)
    • useCountdown: reactivity issues when using composable parameters (26010f3)

    Bug Fixes

    • BAlert: close-count-down event renamed to close-countdown as it is one word (26010f3)
    • BAlert: fix timer system - read section on new docs (26010f3)
    • BPopover events is not emitted correctly #282 (3dee9c8)
    • useCountdown: pausing while stopped showing if prop showOnPause is true (26010f3)
    • useCountdown: remainingMs showing 0 if paused (26010f3)
    • useCountdown: resuming when stopped rendering (26010f3)
    • useCountdown: showing on paused (26010f3)
    • useFormCheck: remove ts any (e30aeaa)

    Performance Improvements

    • useAlignment: use eagerComputed instead (e30aeaa)

    Reverts

    • App.vue: put playground app.vue back to default (26010f3)
    Source code(tar.gz)
    Source code(zip)
  • v0.4.15(Dec 12, 2022)

  • v0.4.14(Dec 10, 2022)

  • v0.4.13(Dec 5, 2022)

  • v0.4.12(Dec 4, 2022)

  • v0.4.11(Dec 1, 2022)

  • v0.4.10(Nov 23, 2022)

  • v0.4.9(Nov 23, 2022)

  • v0.4.8(Nov 12, 2022)

    0.4.8 (2022-11-12)

    Features

    • BPagination: Extend justify content types for between, around and evenly (91cf4a8)
    • refactor icons (76baf45)

    Bug Fixes

    • BCard: Set correct align types. (91cf4a8)
    • BNavbarNav: Set correct align types. (91cf4a8)
    • BNav: Set correct align types. (91cf4a8)
    • BPagination: Set correct align types. (91cf4a8)
    • BRow: Set correct align types. (91cf4a8)
    • BTabs: Set correct align types. (91cf4a8)
    • BTooltip: Error toString if value is undefined. (91cf4a8)

    Reverts

    • BContainer: revert to fix usage with toast (818865c)
    Source code(tar.gz)
    Source code(zip)
  • v0.4.7(Nov 10, 2022)

    0.4.7 (2022-11-10)

    Features

    • add the ability to extend certain built in types (4bd4bee)

    Bug Fixes

    • BModal: moved the modal's css props to global style file to fix modal not showing up & backdrop not appearing correctly in some cases (c20da57)
    Source code(tar.gz)
    Source code(zip)
  • v0.4.6(Nov 4, 2022)

  • v0.4.5(Nov 4, 2022)

  • v0.4.4(Nov 4, 2022)

  • v0.4.3(Oct 30, 2022)

    0.4.3 (2022-10-30)

    Features

    • BTable: added label-stacked prop to label the stacked rows with the field's label (f967d4b)

    Bug Fixes

    • BTable, BTableSimple: Added the needed CSS to make the stacked prop take effect from a specific screen-size breakpoint. (f967d4b)
    • BTable: fixed filtered event being emitted when using pagination (more details: https://github.com/cdmoro/bootstrap-vue-3/issues/768). (f967d4b)
    • BTable: fixed filtering undefined table item values (more details: https://github.com/cdmoro/bootstrap-vue-3/issues/770). (f967d4b)
    • BTable: provided typescript hints for a stacked prop. (f967d4b)
    Source code(tar.gz)
    Source code(zip)
  • v0.4.2(Oct 30, 2022)

  • v0.4.1(Oct 28, 2022)

  • v0.4.0(Oct 28, 2022)

    0.4.0 (2022-10-24)

    ⚠ BREAKING CHANGES

    • BContainer: remove toast props as they didn't work

    Features

    • add static prop ability (41d752a)
    • begin development of bootstrap-vue-3-icons (c1dac9c)
    • BFormInput: added highlight method to active a simple highlight animation for a few seconds (2d34305)
    • BModal: :bug: warning prop lazy does not currently work due to a constrant with updating to remove bootstrap js (af2e95b)
    • BModal: remove bootstrapjs (af2e95b)
    • create eagerComputed component (c038674)

    Bug Fixes

    • BCol: incorrectly keeps col class when also has col-{n} class (7619630)
    • BContainer: remove toast props as they didn't work (c91801d)
    • better checking for when a slot is empty (ded0e69)
    • BListGroupItem: stop giving a TS breaking null attr and use undefined instead (ded0e69)
    • BModal: explicit check for empty slot (760c013)
    • BModal: fixed lazy rendering (65e14f0)
    • BModal: fixes the visibility issue where having more than one modal will overlap each other (f8b83dc)
    • BRow: rowClasses are computed... Unsure if this was an accident before or my mistake now (ded0e69)
    • some v-fors in docs missing :key attr (c91801d)

    Performance Improvements

    • remove possible duplicate computeds (7fb7342)
    • useBooleanish: use eagerComputed instead since the resolved type usually can benefit from it (c038674)

    Reverts

    • BToast: revert btoast changes move to other branch (012d441)
    • some previous eagerComputed changes (ab663ec)
    Source code(tar.gz)
    Source code(zip)
  • v0.3.12(Oct 11, 2022)

    0.3.12 (2022-10-11)

    Features

    • BFormTags: Add tag scoped slot (600c129)

    Bug Fixes

    • BOverlay build issues (b7106f4)
    • BOverlay: strongly type some props (53e6777)
    • BTable: [#742] BTable with provider never hides the busy loader (affcacf)
    • BTransition: allowTransProps to work (dd17957)
    • transProps working in BTransition cascades fixes for components that rely on it, ex: Overlay noFade (dd17957)

    Performance Improvements

    • BTransition: replace ref with cached computed properties (dd17957)
    Source code(tar.gz)
    Source code(zip)
  • v0.3.11(Oct 3, 2022)

  • v0.3.10(Oct 3, 2022)

    0.3.10 (2022-10-03)

    Features

    • BCard: add img slot above or below header (ac71dee)
    • BPlaceholderCard: add placeholder img (041156d)
    • BPlaceholderTable: bplaceholder tfoot attrs are separated (4c6dd4d)
    • BPlaceholderTable: bplaceholder thead attrs are separated (4c6dd4d)
    • BPlaceholderTable: slot tfoot to overwrite default tfoot (4c6dd4d)
    • BPlaceholderTable: slot thead to overwrite default thead (4c6dd4d)

    Bug Fixes

    • BPlaceholderCard: remove unnecessary inner div on body (4c6dd4d)
    Source code(tar.gz)
    Source code(zip)
  • v0.3.9(Oct 3, 2022)

  • v0.3.8(Oct 2, 2022)

  • v0.3.7(Sep 28, 2022)

  • v0.3.6(Sep 28, 2022)

    0.3.6 (2022-09-28)

    ⚠ BREAKING CHANGES

    • BAlert: rename slot dismissible to close
    • rename component card-sub-title to card-subtitle
    • remove last remants of SubTitle to Subtitle
    • BAlert: rename dismiss event to close
    • remove last remants of SubTitle to Subtitle
    • BAlert: rename slot dismissible to close
    • BAlert: rename dismiss event to close
    • BInputGroupPrepend: remove useless props
    • BInputGroupAppend: remove useless props

    Features

    • BAlert: rename slot dismissible to close (44657a7)
    • BAlert: rename slot dismissible to close (fa63831)
    • BCardImg: add blank img options to cardimg (f737fc3)
    • BCardImg: add prop sizes and srcset (f737fc3)
    • BCardImg: emit up load event (f737fc3)
    • BImg: add start and end props (d6d354b)
    • BInputGroupAppend: remove useless props (b9b3fd3)
    • BInputGroupPrepend: remove useless props (b9b3fd3)
    • BPlaceholder.vue (f826406)
    • BPlaceholder: allow any width (9153b43)
    • BPlaceholder: allow any width (355b774)
    • BPlaceholderCard.vue -- work in progress (f826406)
    • BPlaceholderTable.vue (f826406)
    • BPlaceholderWrapper.vue (f826406)
    • ButtonToolbar: make prop role (44657a7)
    • ButtonToolbar: make prop role (fa63831)
    • CloseButton: emit click event up (44657a7)
    • CloseButton: emit click event up (fa63831)

    Bug Fixes

    • #470: no rounded corners when using BInputGrooupPrepend or BInputGroupAppend (b9b3fd3)
    • #714: v-bind={text} causes breaking items to not display text in nested BLink component (9153b43)
    • #714: v-bind={text} causes breaking items to not display text in nested BLink component (9d4060f)
    • BAlert: rename dismiss event to close (44657a7)
    • BAlert: rename dismiss event to close (534bfa5)
    • BAvatar: fix tag to be button and has attr type when prop button and prop buttonType (0448cfa)
    • BInputGroup: fixed BInputGroup awareness of its nested children borders radius (5679c29)
    • BPlaceholder: limit when both cols and width (78b2dba)
    • remove last remants of SubTitle to Subtitle (44657a7)
    • remove last remants of SubTitle to Subtitle (ac66fe4)
    • rename component card-sub-title to card-subtitle (44657a7)
    • workaround for git being dumb (2ac043f)
    • workaround for git being dumb (3ced7ef)
    • workaround for git being dumb (06f1581)
    • workaround for git being dumb (4dbdc3d)

    Miscellaneous Chores

    Source code(tar.gz)
    Source code(zip)
  • v0.3.5(Sep 23, 2022)

    0.3.5 (2022-09-23)

    Features

    • BTable: added a simple version of sort-compare prop (7373350)
    • Carousel: create a startingSlide prop (4a34ade)

    Bug Fixes

    • BFormGroup: label-align prop not working (398744a)
    • BModal: strongly type props (8776e40)
    • Card: subTitle prop renamed to subtitle as it is one word (8776e40)
    • Carousel: get it to work again due to broken useSlot() features (4a34ade)
    • non imported items in dts files (5981902)
    Source code(tar.gz)
    Source code(zip)
  • v0.3.4(Sep 20, 2022)

    0.3.4 (2022-09-20)

    Features

    • add props toggleClass to BnavItemDropdown (d90611a)
    • BAlert: slot dismissible overwrites close (804e8b2)
    • BCloseButton: add in optional prop type to override type=button default (804e8b2)
    • BTable: added emptyText and emptyFilteredText props to customize the shown message when the table is empty and show-empty prop is set to true (1336537)
    • BTable: added no-provider-paging, no-provider-sorting, and no-provider-filtering props for an easier switch from BSV2 (can be used with/without or replace the no-provider prop) (82b0b36)
    • BTable: added no-providing prop which is an alternative to the no-provider-.. props of BSV2 (c40ac06)
    • BTable: added show-empty prop along with the #empty slot to customize the empty message (0918583)
    • BTable: added sortIcon slot, the slot allows you to customize the table's sort icons by providing you some info about the applied sort (24cd37f)
    • Offcanvas: add noHeader prop (94fdebd)
    • Offcanvas: add noHeaderClose prop (94fdebd)
    • Offcanvas: add slot footer (94fdebd)
    • Offcanvas: add slot for header (94fdebd)

    Bug Fixes

    • BAvatarGroup: attempted mutation of readonly (f2fcd74)
    • BModal: Fixed escape key close event not updating v-model prop (57801a4)
    • BModal: fixed the modal's close button located in the header where the button click was not updating v-model value (35a11da)
    • BModal: fixed the modal's close button located in the header where the button click was not updating v-model value (fe00e61)
    • BModal: include explicit import of BCloseButton (fd445e0)
    • BTableContainer: fix up new classes prop (75509ef)
    • BTable: fixed anchor tags not working inside the table rows (7d521dd)
    • directives: export proper naming schemes (f8adcaa)
    • pluckProps: fix wrong ts (f2fcd74)
    • prop name (a72cd1d)
    • renamed bootstrap 5 utilities classes (a68bb52)
    Source code(tar.gz)
    Source code(zip)
  • v0.3.3(Sep 13, 2022)

    0.3.3 (2022-09-13)

    Features

    • adds slots to component reference docs (1e9026b)
    • b-dropdown-item: :sparkles: Bind class attribute to the root (f0063ef)
    • BNavText: add optional text prop (d77abc5)
    • BTab: added new lazyOnce prop, The prop works similar to the lazy prop but it mounts the child component only once. (5f4240b)
    • BTable: added filter prop to filter the table content, added filterable prop to specify which fields should be filtered (2e37dc1)
    • BTable: added functionality to current-page prop, The prop shows a specific page of the given items when the per-page prop is passed. (f177563)
    • BTable: implemented per page prop (f5d52d3)
    • Btable: sortable tables now have the sort icon added using CSS which makes it globally customizable (0639fce)
    • BTable: sortInternal default to true (aac2b68)

    Bug Fixes

    • BButtonGroup: strong type prop size (d77abc5)
    • BDropdown: click event emits MouseEvent (d77abc5)
    • BNavbarToggle: click event emits MouseEvent (d77abc5)
    • BNavForm: pass submit event up (d77abc5)
    • BTable: fixed incorrect responsive-class prop name which was disabling the responsive functionality (eb3ca5c)
    • BTable: Fixed sorting when sorting had no effect when trying to sort an object-formed column that includes multiple properties (ex: name: { first: 'Dickerson', last: 'Macdonald' }) (658d2ec)
    • BTable: header display changed to be inline to allow few abilties such as centering text using CSS (caf495e)
    Source code(tar.gz)
    Source code(zip)
  • v0.3.2(Sep 9, 2022)

  • v0.3.1(Sep 7, 2022)

    0.3.1 (2022-09-07)

    Features

    • BFormFloatingLabel: make props for text opti (dea872d)
    • BFormInvalidFeedback: make props for text option (dea872d)
    • BFormText: make props for text option (dea872d)
    • BFormValidFeedback: make props for text option (dea872d)
    • BInputGroupText: add optional text prop (c3ba8e4)
    • BModal: emit hide and show on modal (f478f5e)
    • BTable: added busy prop logic, the prop shows a spinner and message that can be replaced through a slot template #table-busy (8d91f6c)
    • BTable: added sticky-header prop feature, according to bootstrap-vue2 docs (899f316)
    • BTable: completed the Table Item -> sticky-column feature, according to bootstrap-vue2 docs (d493002)
    • BTable: new sticky-select prop was added, the prop converts the selection column to the sticky mode when the selectable prop is passed as true to the table (6889dbb)
    • BTable: row's _showDetails prop logic was completed (33f30a5)

    Bug Fixes

    • BCard: bodyClass prop renamed to bodyClasses (83f5e53)
    • BCard: footerClass prop renamed to footerClasses (83f5e53)
    • BCard: headerClass renamed to headerClasses (83f5e53)
    • BDropdown: event to be MouseEvent on click (df957f5)
    • BDropdownGroup: rename headerClasses prop to headerClass (3c72126)
    • BDropdownItem: contains disabled on button (972c452)
    • Bdropdown: slot button-content to not render both prop text andslot (df957f5)
    • Bdropdown: toggleText prop given additional slot opt (df957f5)
    • BTableContainer: rename prop responsiveClasses to responsiveClass (3c72126)
    • composables: Do not spread array inside concat function (f9841f5)
    • composables: Spread out children from Fragment slots (963f7a6)
    • composables: Use correct properties to check for types (91d97b0)

    Performance Improvements

    • BDropdownGroup: array.join replaced with template literal (83f5e53)

    Reverts

    • 83f5e53: rename to remove 'es' at end (3c72126)
    Source code(tar.gz)
    Source code(zip)
Owner
Carlos Bonadeo
I'm a Front End Engineer with over 12 years of experience in Front End development. HTML, CSS (Sass, TailwindCSS) and JS Frameworks: React (Typescript) & Vue
Carlos Bonadeo
A Complete Single Page Application using Vue, Vue Router, Bootstrap-Vue, Vuex and all....

Vue-CRUD Application A Complete Single Page Application (SPA) or Product CRUD Application using Vue 3, Vue Router, Vue-Pagination, Searching, Sweet Al

Maniruzzaman Akash 56 Dec 25, 2022
Basic dashboard developed in Vue.js. Using Vue and Bootstrap

RouterDevs Dashboard básico que se conecta com uma API REST utilizando Vue.js ⬆️ Status ✔️ The main phase is complete ?? Automation and design phase a

Beatriz gonçalves 4 Mar 31, 2022
A set of awesome starter kits (boilerplate code) for projects based on Bootstrap, Express, React or Vue

The cloudapps-cli offers a set of awesome starter kits (boilerplate code) for projects based on Bootstrap, Express, React or Vue. Tested on Windows, Linux and macOS.

Boyan Kostadinov 2 Mar 2, 2022
A VueJS 3 starter to create Vue applications easily and quickly with Vue Router, Snowpack, TypeScript and SCSS

VueJS 3 Starter ✨ A VueJS 3 starter to create Vue applications easily and quickly with Vue Router, Snowpack, TypeScript and SCSS Architecture ├─ publi

null 1 Jun 1, 2022
A seed project with vue, vuex, typescript & webpack with hot reloading and all the good stuf

Vue Vuex TypeScript Webpack seed This seed project includes some of the 'hot' and latests web technologies such as TypeScript, Vue, Vuex,Vuex-Typescri

Israel Zablianov 35 Jan 17, 2022
This template should help get you started developing with Vue 3, Vuetify 3 and Typescript in Vite.

This template should help get you started developing with Vue 3, Vuetify 3 and Typescript in Vite.

Peshang Hiwa 96 Dec 29, 2022
This template should help get you started developing with Vue 3 and Typescript in Vite

Vue 3 + Typescript + Vite This template should help get you started developing with Vue 3 and Typescript in Vite. The template uses Vue 3 <script setu

null 2 Nov 8, 2021
A stock app built with Vue.js, TypeScript and Vuetify. Deployed on Vercel

v-stocks Project setup yarn install Compiles and hot-reloads for development yarn serve Compiles and minifies for production yarn build Lints and f

Felipe Lara 14 Dec 15, 2022
An e-commerce website using Vue, typescript , pinia store, and service layer design pattern.

An e-commerce website using Vue, typescript , pinia store, and service layer design pattern. Don't bother about how the repository name fits the description.,Github suggested it. I would have used an

Cheedinmar 1 Oct 29, 2021
This is a Nuxt 3 Starter Kit with Vite, Vue 3, TypeScript, SCSS and TailwindCSS!

Nuxt 3 Starter Kit This is a Nuxt 3 Starter Kit with Vite, Vue 3, TypeScript, SCSS and TailwindCSS! We recommend to look at the documentation. Setup M

Ricardo 17 Nov 19, 2022
This template should help get you started developing with Vue 3, Typescript and Tailwindcss in Vite.

Starter Vue 3 + Typescript + Vite + Tailwindcss This template should help get you started developing with Vue 3, Typescript and Tailwindcss in Vite. T

Huda Damar 13 Jun 14, 2022
Elucidator blog starter - a starter blog built with Vuejs 3, Vite, and Typescript

Elucidator blog starter Blog starter build with Vue 3 + Vite + Typescript

Elucidator Project 30 Nov 8, 2022
🚀A template for uniapp with vue3.x and TypeScript.

VEnable uniapp VEnable uniapp ?? A template for uniapp with vue3.x and TypeScript. Live Demo ?? Work in progress ?? Features ⚡️ Vite3, Vue3, pnpm ?? C

VEnable 13 Dec 30, 2022
Vue 3 Webpack Boilerplate (Vue 3, Vue Router 4, Vuex 4, Typescript)

Vue 3 Webpack Boilerplate (Vue 3, Vue Router 4, Vuex 4, Typescript)

Vlad Starkovsky 72 Oct 11, 2022
Vite Vue 3 starter with Vuex + Vue Router + Typescript + ESLint + Prettier

vite-vue3-essential-typescript-eslint-starter This template should help get you started developing with Vue 3 and Typescript in Vite. The template use

유안씌 12 Aug 12, 2022
a front end template development by vue3.x typescript vite2.x vuex4.x vue-router 4.x mock element-plus

Vue 3 + Typescript + Vite + Vuex + Vue-Router This template should help get you started developing with Vue 3 and Typescript and Vuex and Vu

coderly 51 Dec 10, 2022
这是基于 vue3.x + CompositionAPI + typescript + vite + element plus + vue-router-next + next.vuex,适配手机、平板、pc 的后台开源免费模板库(vue2.x请切换vue-prev-admin分支)

介绍 基于 vue3.x + CompositionAPI + typescript + vite + element plus + vue-router-next + next.vuex,适配手机、平板、pc 的后台开源免费模板,希望减少工作量,帮助大家实现快速开发。 线上预览 vue3.x 版本

null 785 Jan 2, 2023
:star: A Vite 2.x + Vue 3.x + TypeScript template starter

Vite2.x + Vue3.x + TypeScript Starter 在线预览 https://vite-vue3-starter.xpoet.cn

指间的诗意 415 Dec 28, 2022
Opinionated Vue 3 + Vite + Typescript blog starter ⚔

Elucidator blog starter Blog starter build with Vue 3 + Vite + Typescript Introduction Elucidator blog starter is a starter blog built with Vuejs 3, V

I Gusti Ngurah Satya Wikananda 30 Nov 8, 2022