Installation
composer require austral/design-bundle
Ensure your config/bundles.php includes:
Austral\DesignBundle\AustralDesignBundle::class => ['all' => true],
Publish Assets
php bin/console assets:install
npm run dev # or `npm run build` for production
First Use Case: Basic Admin Layout
Extend the base template in resources/views/layouts/admin.html.twig:
{% extends 'AustralDesignBundle::base.html.twig' %}
{% block title %}{{ parent() }} - My App{% endblock %}
Key Directories
vendor/austral/design-bundle/resources/views/vendor/austral/design-bundle/resources/assets/scss/vendor/austral/design-bundle/resources/assets/js/Pattern: Use Twig components for reusable UI elements.
{# Button Component #}
<austral-button label="Save" icon="save" type="primary" />
Workflow:
vendor/austral/design-bundle/resources/views/components/.templates/components/ directory.Pattern: Customize colors/fonts via SCSS variables.
// Override in resources/assets/scss/austral/_variables.scss
$primary-color: #2a5c8a;
$font-family: 'Inter', sans-serif;
Workflow:
php bin/console assets:install --symlink
_variables.scss before @import 'AustralDesignBundle/scss/austral';.Pattern: Use Austral’s form components with Symfony forms.
{% form_theme form 'AustralDesignBundle:Form:theme.html.twig' %}
Key Features:
choice, textarea, and file fields.Pattern: Modify admin layouts without forking.
{# resources/views/layouts/admin.html.twig #}
{% extends 'AustralDesignBundle::base.html.twig' %}
{% block sidebar %}
{{ parent() }}
<austral-collapse title="Custom Section">
<div>Your content here</div>
</austral-collapse>
{% endblock %}
Pattern: Leverage Austral’s JS utilities.
// Example: Initialize a modal
document.querySelector('[data-austral-modal]').australModal();
Workflow:
{{ encore_entry_link_tags('app') }} {# Ensure Encore processes Austral's JS #}
data-austral-tooltip).Asset Paths
composer require.php bin/console assets:install and rebuild assets.--symlink for development to avoid copying vendor files.Twig Component Overrides
twig.config.path in config/packages/twig.php.VanillaJS Dependencies
Uncaught ReferenceError for Austral JS methods.encore.js is loaded after Austral’s JS (check build order).SCSS Conflicts
!important sparingly; target specific classes (e.g., .your-class .austral-button).Form Theme Conflicts
$form->setTheme([new \Twig_Theme('AustralDesignBundle:Form:theme.html.twig')]);
Twig Debug: Enable in .env:
APP_DEBUG=true
Use {{ dump(_context) }} to inspect component data.
Browser DevTools:
Console Logs:
Austral’s JS components log errors to console.error. Filter for austral: messages.
Custom Components
templates/components/your_component.html.twig.resources/views/base.html.twig:
{% block austral_components %}
{{ parent() }}
{% include 'components/your_component.html.twig' %}
{% endblock %}
SCSS Extensions
resources/assets/scss/austral/_extensions.scss:
@mixin your-mixin() {
// ...
}
@import 'AustralDesignBundle/scss/austral';
@import '~your-path/extensions';
JavaScript Plugins
austral namespace:
austral.plugins = austral.plugins || {};
austral.plugins.YourPlugin = function(element) {
// Initialize logic
};
resources/js/app.js:
import './austral-extensions';
Template Overrides
collapse.html.twig) in templates/AustralDesignBundle/components/.// encore.js
Encore
.addEntry('admin', './assets/js/admin.js')
.splitEntry('admin', ['collapse', 'tabs']);
postcss.config.js to remove unused Austral classes:
module.exports = {
plugins: [
require('purgecss')({
content: ['**/*.twig'],
defaultExtractor: content => content.match(/[\w-/:]+(?<!:)/g) || [],
}),
],
};
data-austral-collapse attributes.
<austral-collapse title="Section" data-austral-collapse>
<!-- Content -->
</austral-collapse>
document.querySelector methods. Example:
// Before (jQuery)
$('.austral-tooltip').tooltip();
// After (VanillaJS)
document.querySelectorAll('[data-austral-tooltip]').forEach(el => {
new austral.Tooltip(el);
});
How can I help you explore Laravel packages today?