/** @module */
import { split } from '../helpers/split'
import { wrapArray } from '../helpers/wrap_array'
import { wrapTokens } from '../helpers/wrap_tokens'
import marpitPlugin from '../plugin'
/**
* Marpit slide container plugin.
*
* @function slideContainer
* @param {MarkdownIt} md markdown-it instance.
*/
function _slideContainer(md) {
const containers = wrapArray(md.marpit.options.slideContainer)
if (!containers) return
const target = [...containers].reverse()
md.core.ruler.push('marpit_slide_containers', (state) => {
if (state.inlineMode) return
const newTokens = []
for (const tokens of split(
state.tokens,
(t) => t.meta && t.meta.marpitSlideElement === 1,
true
)) {
if (tokens.length > 0)
newTokens.push(
...target.reduce(
(slides, conts) =>
wrapTokens(state.Token, 'marpit_slide_containers', conts, slides),
tokens
)
)
}
state.tokens = newTokens
})
}
export const slideContainer = marpitPlugin(_slideContainer)
export default slideContainer